[LEDE-DEV] [PATCH] kernel: bump 4.9 to 4.9.60

John Crispin john at phrozen.org
Tue Nov 7 23:20:57 PST 2017



On 06/11/17 17:17, Koen Vandeputte wrote:
> Refreshed all patches.
>
> Compiled on: cns3xxx, imx6
> Run-tested on: cns3xxx, imx6

Hi,
the 
target/linux/layerscape/patches-4.9/820-base-soc-Introduce-soc_device_match-interface.patchpatch 
looks overly large. why is this such a huge change ?
     John
>
> Signed-off-by: Koen Vandeputte <koen.vandeputte at ncentric.com>
> ---
>   include/kernel-version.mk                          |   4 +-
>   .../patches-4.9/950-0031-Add-dwc_otg-driver.patch  |   2 +-
>   .../hack-4.9/214-spidev_h_portability.patch        |   2 +-
>   ...dts-ipq4019-ap-dk04-fix-pinctrl-node-name.patch |   2 +-
>   ...entralize-net_device-min-max-MTU-checking.patch |  13 +-
>   .../303-add-devm_alloc_percpu-support.patch        |  11 +-
>   .../patches-4.9/601-net-readd-skb_recycle.patch    |  11 +-
>   ...inux-core-export-copy_skb_header-function.patch |  13 +-
>   ...date-the-xmit-timestamp-to-avoid-watchdog.patch |   9 +-
>   .../patches-4.9/817-usb-support-layerscape.patch   |   2 +-
>   ...-soc-Introduce-soc_device_match-interface.patch |  21 +-
>   .../sunxi/patches-4.9/0052-stmmac-form-4-12.patch  | 386 +++++++++++----------
>   ...Allow-building-and-running-on-older-hosts.patch |   2 +-
>   .../x86/patches-4.9/100-fix_cs5535_clockevt.patch  |   2 +-
>   14 files changed, 229 insertions(+), 251 deletions(-)
>
> diff --git a/include/kernel-version.mk b/include/kernel-version.mk
> index 2bddc87..4dd1399 100644
> --- a/include/kernel-version.mk
> +++ b/include/kernel-version.mk
> @@ -4,11 +4,11 @@ LINUX_RELEASE?=1
>   
>   LINUX_VERSION-3.18 = .71
>   LINUX_VERSION-4.4 = .93
> -LINUX_VERSION-4.9 = .58
> +LINUX_VERSION-4.9 = .60
>   
>   LINUX_KERNEL_HASH-3.18.71 = 5abc9778ad44ce02ed6c8ab52ece8a21c6d20d21f6ed8a19287b4a38a50c1240
>   LINUX_KERNEL_HASH-4.4.93 = ed349314f16e78a6571b5f8884f6452782aef6c26b81bcc7ccdac44ecd917c36
> -LINUX_KERNEL_HASH-4.9.58 = 748f12a28689644b6a9102c67f8fa7938ca73823a949ba6f65024aecf2f221a7
> +LINUX_KERNEL_HASH-4.9.60 = 0e326c5c5152c41265d1c681b41b52afce1925f4a382dfd41cb93605f3fcad04
>   
>   ifdef KERNEL_PATCHVER
>     LINUX_VERSION:=$(KERNEL_PATCHVER)$(strip $(LINUX_VERSION-$(KERNEL_PATCHVER)))
> diff --git a/target/linux/brcm2708/patches-4.9/950-0031-Add-dwc_otg-driver.patch b/target/linux/brcm2708/patches-4.9/950-0031-Add-dwc_otg-driver.patch
> index 1932e30..c3862fc 100644
> --- a/target/linux/brcm2708/patches-4.9/950-0031-Add-dwc_otg-driver.patch
> +++ b/target/linux/brcm2708/patches-4.9/950-0031-Add-dwc_otg-driver.patch
> @@ -696,7 +696,7 @@ Signed-off-by: Noralf Trønnes <noralf at tronnes.org>
>    }
>   --- a/drivers/usb/core/hub.c
>   +++ b/drivers/usb/core/hub.c
> -@@ -5042,7 +5042,7 @@ static void port_event(struct usb_hub *h
> +@@ -5045,7 +5045,7 @@ static void port_event(struct usb_hub *h
>    	if (portchange & USB_PORT_STAT_C_OVERCURRENT) {
>    		u16 status = 0, unused;
>    
> diff --git a/target/linux/generic/hack-4.9/214-spidev_h_portability.patch b/target/linux/generic/hack-4.9/214-spidev_h_portability.patch
> index 23914d6..ad4706c 100644
> --- a/target/linux/generic/hack-4.9/214-spidev_h_portability.patch
> +++ b/target/linux/generic/hack-4.9/214-spidev_h_portability.patch
> @@ -13,7 +13,7 @@ Signed-off-by: Felix Fietkau <nbd at nbd.name>
>   
>   --- a/include/uapi/linux/spi/spidev.h
>   +++ b/include/uapi/linux/spi/spidev.h
> -@@ -111,7 +111,7 @@ struct spi_ioc_transfer {
> +@@ -112,7 +112,7 @@ struct spi_ioc_transfer {
>    
>    /* not all platforms use <asm-generic/ioctl.h> or _IOC_TYPECHECK() ... */
>    #define SPI_MSGSIZE(N) \
> diff --git a/target/linux/ipq806x/patches-4.9/864-01-dts-ipq4019-ap-dk04-fix-pinctrl-node-name.patch b/target/linux/ipq806x/patches-4.9/864-01-dts-ipq4019-ap-dk04-fix-pinctrl-node-name.patch
> index a7717a6..f2de6d6 100644
> --- a/target/linux/ipq806x/patches-4.9/864-01-dts-ipq4019-ap-dk04-fix-pinctrl-node-name.patch
> +++ b/target/linux/ipq806x/patches-4.9/864-01-dts-ipq4019-ap-dk04-fix-pinctrl-node-name.patch
> @@ -1,6 +1,6 @@
>   --- a/arch/arm/boot/dts/qcom-ipq4019-ap.dk04.1.dtsi
>   +++ b/arch/arm/boot/dts/qcom-ipq4019-ap.dk04.1.dtsi
> -@@ -40,7 +40,7 @@
> +@@ -38,7 +38,7 @@
>    			clock-frequency = <48000000>;
>    		};
>    
> diff --git a/target/linux/layerscape/patches-4.9/001-net-centralize-net_device-min-max-MTU-checking.patch b/target/linux/layerscape/patches-4.9/001-net-centralize-net_device-min-max-MTU-checking.patch
> index fcabb62..104ecda 100644
> --- a/target/linux/layerscape/patches-4.9/001-net-centralize-net_device-min-max-MTU-checking.patch
> +++ b/target/linux/layerscape/patches-4.9/001-net-centralize-net_device-min-max-MTU-checking.patch
> @@ -26,11 +26,9 @@ Signed-off-by: David S. Miller <davem at davemloft.net>
>    net/core/dev.c            | 13 +++++++++++--
>    2 files changed, 15 insertions(+), 2 deletions(-)
>   
> -diff --git a/include/linux/netdevice.h b/include/linux/netdevice.h
> -index 780e7171f548..2082b7d02a77 100644
>   --- a/include/linux/netdevice.h
>   +++ b/include/linux/netdevice.h
> -@@ -1507,6 +1507,8 @@ enum netdev_priv_flags {
> +@@ -1509,6 +1509,8 @@ enum netdev_priv_flags {
>     *	@if_port:	Selectable AUI, TP, ...
>     *	@dma:		DMA channel
>     *	@mtu:		Interface MTU value
> @@ -39,7 +37,7 @@ index 780e7171f548..2082b7d02a77 100644
>     *	@type:		Interface hardware type
>     *	@hard_header_len: Maximum hardware header length.
>     *	@min_header_len:  Minimum hardware header length
> -@@ -1728,6 +1730,8 @@ struct net_device {
> +@@ -1735,6 +1737,8 @@ struct net_device {
>    	unsigned char		dma;
>    
>    	unsigned int		mtu;
> @@ -48,11 +46,9 @@ index 780e7171f548..2082b7d02a77 100644
>    	unsigned short		type;
>    	unsigned short		hard_header_len;
>    	unsigned short		min_header_len;
> -diff --git a/net/core/dev.c b/net/core/dev.c
> -index 2e04fd188081..c7ec56e8659a 100644
>   --- a/net/core/dev.c
>   +++ b/net/core/dev.c
> -@@ -6524,9 +6524,18 @@ int dev_set_mtu(struct net_device *dev, int new_mtu)
> +@@ -6603,9 +6603,18 @@ int dev_set_mtu(struct net_device *dev,
>    	if (new_mtu == dev->mtu)
>    		return 0;
>    
> @@ -73,6 +69,3 @@ index 2e04fd188081..c7ec56e8659a 100644
>    
>    	if (!netif_device_present(dev))
>    		return -ENODEV;
> ---
> -2.11.1
> -
> diff --git a/target/linux/layerscape/patches-4.9/303-add-devm_alloc_percpu-support.patch b/target/linux/layerscape/patches-4.9/303-add-devm_alloc_percpu-support.patch
> index a8573cc..2eb7cf6 100644
> --- a/target/linux/layerscape/patches-4.9/303-add-devm_alloc_percpu-support.patch
> +++ b/target/linux/layerscape/patches-4.9/303-add-devm_alloc_percpu-support.patch
> @@ -9,8 +9,6 @@ Signed-off-by: Zhao Qiang <qiang.zhao at nxp.com>
>    include/linux/device.h | 19 +++++++++++++++
>    2 files changed, 85 insertions(+)
>   
> -diff --git a/drivers/base/devres.c b/drivers/base/devres.c
> -index 8fc654f0807b..71d577025285 100644
>   --- a/drivers/base/devres.c
>   +++ b/drivers/base/devres.c
>   @@ -10,6 +10,7 @@
> @@ -21,7 +19,7 @@ index 8fc654f0807b..71d577025285 100644
>    
>    #include "base.h"
>    
> -@@ -985,3 +986,68 @@ void devm_free_pages(struct device *dev, unsigned long addr)
> +@@ -985,3 +986,68 @@ void devm_free_pages(struct device *dev,
>    			       &devres));
>    }
>    EXPORT_SYMBOL_GPL(devm_free_pages);
> @@ -90,11 +88,9 @@ index 8fc654f0807b..71d577025285 100644
>   +			       (void *)pdata));
>   +}
>   +EXPORT_SYMBOL_GPL(devm_free_percpu);
> -diff --git a/include/linux/device.h b/include/linux/device.h
> -index bc41e87a969b..0a2135cbddc9 100644
>   --- a/include/linux/device.h
>   +++ b/include/linux/device.h
> -@@ -686,6 +686,25 @@ void __iomem *devm_ioremap_resource(struct device *dev, struct resource *res);
> +@@ -688,6 +688,25 @@ void __iomem *devm_ioremap_resource(stru
>    int devm_add_action(struct device *dev, void (*action)(void *), void *data);
>    void devm_remove_action(struct device *dev, void (*action)(void *), void *data);
>    
> @@ -120,6 +116,3 @@ index bc41e87a969b..0a2135cbddc9 100644
>    static inline int devm_add_action_or_reset(struct device *dev,
>    					   void (*action)(void *), void *data)
>    {
> ---
> -2.11.1
> -
> diff --git a/target/linux/layerscape/patches-4.9/601-net-readd-skb_recycle.patch b/target/linux/layerscape/patches-4.9/601-net-readd-skb_recycle.patch
> index 08aa2a0..105866e 100644
> --- a/target/linux/layerscape/patches-4.9/601-net-readd-skb_recycle.patch
> +++ b/target/linux/layerscape/patches-4.9/601-net-readd-skb_recycle.patch
> @@ -12,11 +12,9 @@ Signed-off-by: Madalin Bucur <madalin.bucur at freescale.com>
>    net/core/skbuff.c      | 26 ++++++++++++++++++++++++++
>    2 files changed, 27 insertions(+)
>   
> -diff --git a/include/linux/skbuff.h b/include/linux/skbuff.h
> -index 32810f279f8e..a52a6fb0ac2e 100644
>   --- a/include/linux/skbuff.h
>   +++ b/include/linux/skbuff.h
> -@@ -902,6 +902,7 @@ void kfree_skb(struct sk_buff *skb);
> +@@ -903,6 +903,7 @@ void kfree_skb(struct sk_buff *skb);
>    void kfree_skb_list(struct sk_buff *segs);
>    void skb_tx_error(struct sk_buff *skb);
>    void consume_skb(struct sk_buff *skb);
> @@ -24,11 +22,9 @@ index 32810f279f8e..a52a6fb0ac2e 100644
>    void  __kfree_skb(struct sk_buff *skb);
>    extern struct kmem_cache *skbuff_head_cache;
>    
> -diff --git a/net/core/skbuff.c b/net/core/skbuff.c
> -index fe008f1bd930..ab1038083df2 100644
>   --- a/net/core/skbuff.c
>   +++ b/net/core/skbuff.c
> -@@ -825,6 +825,32 @@ void napi_consume_skb(struct sk_buff *skb, int budget)
> +@@ -842,6 +842,32 @@ void napi_consume_skb(struct sk_buff *sk
>    }
>    EXPORT_SYMBOL(napi_consume_skb);
>    
> @@ -61,6 +57,3 @@ index fe008f1bd930..ab1038083df2 100644
>    /* Make sure a field is enclosed inside headers_start/headers_end section */
>    #define CHECK_SKB_FIELD(field) \
>    	BUILD_BUG_ON(offsetof(struct sk_buff, field) <		\
> ---
> -2.11.1
> -
> diff --git a/target/linux/layerscape/patches-4.9/602-linux-core-export-copy_skb_header-function.patch b/target/linux/layerscape/patches-4.9/602-linux-core-export-copy_skb_header-function.patch
> index 1244675..b00b7aa 100644
> --- a/target/linux/layerscape/patches-4.9/602-linux-core-export-copy_skb_header-function.patch
> +++ b/target/linux/layerscape/patches-4.9/602-linux-core-export-copy_skb_header-function.patch
> @@ -9,11 +9,9 @@ Signed-off-by: Camelia Groza camelia.groza at nxp.com
>    net/core/skbuff.c      | 3 ++-
>    2 files changed, 3 insertions(+), 1 deletion(-)
>   
> -diff --git a/include/linux/skbuff.h b/include/linux/skbuff.h
> -index a52a6fb0ac2e..a0385f9bdd4e 100644
>   --- a/include/linux/skbuff.h
>   +++ b/include/linux/skbuff.h
> -@@ -3063,6 +3063,7 @@ static inline void skb_free_datagram_locked(struct sock *sk,
> +@@ -3058,6 +3058,7 @@ static inline void skb_free_datagram_loc
>    }
>    int skb_kill_datagram(struct sock *sk, struct sk_buff *skb, unsigned int flags);
>    int skb_copy_bits(const struct sk_buff *skb, int offset, void *to, int len);
> @@ -21,11 +19,9 @@ index a52a6fb0ac2e..a0385f9bdd4e 100644
>    int skb_store_bits(struct sk_buff *skb, int offset, const void *from, int len);
>    __wsum skb_copy_and_csum_bits(const struct sk_buff *skb, int offset, u8 *to,
>    			      int len, __wsum csum);
> -diff --git a/net/core/skbuff.c b/net/core/skbuff.c
> -index ab1038083df2..2684c49b9805 100644
>   --- a/net/core/skbuff.c
>   +++ b/net/core/skbuff.c
> -@@ -1082,7 +1082,7 @@ static void skb_headers_offset_update(struct sk_buff *skb, int off)
> +@@ -1099,7 +1099,7 @@ static void skb_headers_offset_update(st
>    	skb->inner_mac_header += off;
>    }
>    
> @@ -34,7 +30,7 @@ index ab1038083df2..2684c49b9805 100644
>    {
>    	__copy_skb_header(new, old);
>    
> -@@ -1090,6 +1090,7 @@ static void copy_skb_header(struct sk_buff *new, const struct sk_buff *old)
> +@@ -1107,6 +1107,7 @@ static void copy_skb_header(struct sk_bu
>    	skb_shinfo(new)->gso_segs = skb_shinfo(old)->gso_segs;
>    	skb_shinfo(new)->gso_type = skb_shinfo(old)->gso_type;
>    }
> @@ -42,6 +38,3 @@ index ab1038083df2..2684c49b9805 100644
>    
>    static inline int skb_alloc_rx_flag(const struct sk_buff *skb)
>    {
> ---
> -2.11.1
> -
> diff --git a/target/linux/layerscape/patches-4.9/603-sdk_dpaa-update-the-xmit-timestamp-to-avoid-watchdog.patch b/target/linux/layerscape/patches-4.9/603-sdk_dpaa-update-the-xmit-timestamp-to-avoid-watchdog.patch
> index a9a4596..0d3b9d6 100644
> --- a/target/linux/layerscape/patches-4.9/603-sdk_dpaa-update-the-xmit-timestamp-to-avoid-watchdog.patch
> +++ b/target/linux/layerscape/patches-4.9/603-sdk_dpaa-update-the-xmit-timestamp-to-avoid-watchdog.patch
> @@ -17,8 +17,6 @@ Signed-off-by: Camelia Groza <camelia.groza at nxp.com>
>    net/sched/sch_generic.c         | 7 +++++++
>    2 files changed, 9 insertions(+)
>   
> -diff --git a/include/linux/netdev_features.h b/include/linux/netdev_features.h
> -index 9c6c8ef2e9e7..90b4107ebeff 100644
>   --- a/include/linux/netdev_features.h
>   +++ b/include/linux/netdev_features.h
>   @@ -74,6 +74,7 @@ enum {
> @@ -37,11 +35,9 @@ index 9c6c8ef2e9e7..90b4107ebeff 100644
>    
>    #define for_each_netdev_feature(mask_addr, bit)	\
>    	for_each_set_bit(bit, (unsigned long *)mask_addr, NETDEV_FEATURE_COUNT)
> -diff --git a/net/sched/sch_generic.c b/net/sched/sch_generic.c
> -index 6cfb6e9038c2..3fab16cb7c58 100644
>   --- a/net/sched/sch_generic.c
>   +++ b/net/sched/sch_generic.c
> -@@ -309,6 +309,13 @@ static void dev_watchdog(unsigned long arg)
> +@@ -309,6 +309,13 @@ static void dev_watchdog(unsigned long a
>    					txq->trans_timeout++;
>    					break;
>    				}
> @@ -55,6 +51,3 @@ index 6cfb6e9038c2..3fab16cb7c58 100644
>    			}
>    
>    			if (some_queue_timedout) {
> ---
> -2.11.1
> -
> diff --git a/target/linux/layerscape/patches-4.9/817-usb-support-layerscape.patch b/target/linux/layerscape/patches-4.9/817-usb-support-layerscape.patch
> index 147b03a..cd724cb 100644
> --- a/target/linux/layerscape/patches-4.9/817-usb-support-layerscape.patch
> +++ b/target/linux/layerscape/patches-4.9/817-usb-support-layerscape.patch
> @@ -95,7 +95,7 @@ Signed-off-by: Yangbo Lu <yangbo.lu at nxp.com>
>    	int ret;
>   --- a/drivers/usb/core/hub.c
>   +++ b/drivers/usb/core/hub.c
> -@@ -4412,6 +4412,14 @@ hub_port_init(struct usb_hub *hub, struc
> +@@ -4415,6 +4415,14 @@ hub_port_init(struct usb_hub *hub, struc
>    	else
>    		speed = usb_speed_string(udev->speed);
>    
> diff --git a/target/linux/layerscape/patches-4.9/820-base-soc-Introduce-soc_device_match-interface.patch b/target/linux/layerscape/patches-4.9/820-base-soc-Introduce-soc_device_match-interface.patch
> index ec9e261..e277e30 100644
> --- a/target/linux/layerscape/patches-4.9/820-base-soc-Introduce-soc_device_match-interface.patch
> +++ b/target/linux/layerscape/patches-4.9/820-base-soc-Introduce-soc_device_match-interface.patch
> @@ -45,20 +45,16 @@ Acked-by: Greg Kroah-Hartman <gregkh at linuxfoundation.org>
>    include/linux/sys_soc.h |  3 +++
>    3 files changed, 70 insertions(+)
>   
> -diff --git a/drivers/base/Kconfig b/drivers/base/Kconfig
> -index fdf44cac08e6..991b21e1f89b 100644
>   --- a/drivers/base/Kconfig
>   +++ b/drivers/base/Kconfig
> -@@ -235,6 +235,7 @@ config GENERIC_CPU_AUTOPROBE
> +@@ -234,6 +234,7 @@ config GENERIC_CPU_DEVICES
>    
> - config SOC_BUS
> + config GENERIC_CPU_AUTOPROBE
>    	bool
>   +	select GLOB
>    
> - source "drivers/base/regmap/Kconfig"
> -
> -diff --git a/drivers/base/soc.c b/drivers/base/soc.c
> -index 028cef377fd4..04ee597fc3a3 100644
> + config SOC_BUS
> + 	bool
>   --- a/drivers/base/soc.c
>   +++ b/drivers/base/soc.c
>   @@ -13,6 +13,7 @@
> @@ -69,7 +65,7 @@ index 028cef377fd4..04ee597fc3a3 100644
>    
>    static DEFINE_IDA(soc_ida);
>    
> -@@ -168,3 +169,68 @@ static int __init soc_bus_register(void)
> +@@ -159,3 +160,68 @@ static int __init soc_bus_register(void)
>    	return bus_register(&soc_bus_type);
>    }
>    core_initcall(soc_bus_register);
> @@ -138,8 +134,6 @@ index 028cef377fd4..04ee597fc3a3 100644
>   +	return NULL;
>   +}
>   +EXPORT_SYMBOL_GPL(soc_device_match);
> -diff --git a/include/linux/sys_soc.h b/include/linux/sys_soc.h
> -index 2739ccb69571..9f5eb06f9fd8 100644
>   --- a/include/linux/sys_soc.h
>   +++ b/include/linux/sys_soc.h
>   @@ -13,6 +13,7 @@ struct soc_device_attribute {
> @@ -150,13 +144,10 @@ index 2739ccb69571..9f5eb06f9fd8 100644
>    };
>    
>    /**
> -@@ -34,4 +35,6 @@ void soc_device_unregister(struct soc_device *soc_dev);
> +@@ -34,4 +35,6 @@ void soc_device_unregister(struct soc_de
>     */
>    struct device *soc_device_to_device(struct soc_device *soc);
>    
>   +const struct soc_device_attribute *soc_device_match(
>   +	const struct soc_device_attribute *matches);
>    #endif /* __SOC_BUS_H */
> ---
> -2.11.1
> -
> diff --git a/target/linux/sunxi/patches-4.9/0052-stmmac-form-4-12.patch b/target/linux/sunxi/patches-4.9/0052-stmmac-form-4-12.patch
> index 285e4d2..a5cdec5 100644
> --- a/target/linux/sunxi/patches-4.9/0052-stmmac-form-4-12.patch
> +++ b/target/linux/sunxi/patches-4.9/0052-stmmac-form-4-12.patch
> @@ -2887,7 +2887,7 @@
>   +
>   +		/* Display RX ring */
>   +		priv->hw->desc->display_ring(head_rx, DMA_RX_SIZE, true);
> - 	}
> ++	}
>   +}
>   +
>   +static void stmmac_display_tx_rings(struct stmmac_priv *priv)
> @@ -2906,15 +2906,15 @@
>   +			head_tx = (void *)tx_q->dma_etx;
>   +		else
>   +			head_tx = (void *)tx_q->dma_tx;
> ++
> ++		priv->hw->desc->display_ring(head_tx, DMA_TX_SIZE, false);
> + 	}
> ++}
>    
>   -	/* Display Rx ring */
>   -	priv->hw->desc->display_ring(head_rx, DMA_RX_SIZE, true);
>   -	/* Display Tx ring */
>   -	priv->hw->desc->display_ring(head_tx, DMA_TX_SIZE, false);
> -+		priv->hw->desc->display_ring(head_tx, DMA_TX_SIZE, false);
> -+	}
> -+}
> -+
>   +static void stmmac_display_rings(struct stmmac_priv *priv)
>   +{
>   +	/* Display RX ring */
> @@ -3131,7 +3131,7 @@
>    
>    	if (priv->hw->mode->set_16kib_bfsize)
>    		bfsize = priv->hw->mode->set_16kib_bfsize(dev->mtu);
> -@@ -1018,235 +1228,409 @@ static int init_dma_desc_rings(struct ne
> +@@ -1018,257 +1228,516 @@ static int init_dma_desc_rings(struct ne
>    
>    	priv->dma_buf_sz = bfsize;
>    
> @@ -3163,7 +3163,10 @@
>   +				p = &((rx_q->dma_erx + i)->basic);
>   +			else
>   +				p = rx_q->dma_rx + i;
> -+
> +
> +-		ret = stmmac_init_rx_buffers(priv, p, i, flags);
> +-		if (ret)
> +-			goto err_init_rx_buffers;
>   +			ret = stmmac_init_rx_buffers(priv, p, i, flags,
>   +						     queue);
>   +			if (ret)
> @@ -3173,18 +3176,15 @@
>   +				  rx_q->rx_skbuff[i], rx_q->rx_skbuff[i]->data,
>   +				  (unsigned int)rx_q->rx_skbuff_dma[i]);
>   +		}
> -
> --		ret = stmmac_init_rx_buffers(priv, p, i, flags);
> --		if (ret)
> --			goto err_init_rx_buffers;
> ++
>   +		rx_q->cur_rx = 0;
>   +		rx_q->dirty_rx = (unsigned int)(i - DMA_RX_SIZE);
> ++
> ++		stmmac_clear_rx_descriptors(priv, queue);
>    
>   -		netif_dbg(priv, probe, priv->dev, "[%p]\t[%p]\t[%x]\n",
>   -			  priv->rx_skbuff[i], priv->rx_skbuff[i]->data,
>   -			  (unsigned int)priv->rx_skbuff_dma[i]);
> -+		stmmac_clear_rx_descriptors(priv, queue);
> -+
>   +		/* Setup the chained descriptor addresses */
>   +		if (priv->mode == STMMAC_CHAIN_MODE) {
>   +			if (priv->extend_desc)
> @@ -3277,8 +3277,13 @@
>   +				priv->hw->mode->init(tx_q->dma_tx,
>   +						     tx_q->dma_tx_phy,
>   +						     DMA_TX_SIZE, 0);
> -+		}
> -+
> + 		}
> +
> +-		priv->tx_skbuff_dma[i].buf = 0;
> +-		priv->tx_skbuff_dma[i].map_as_page = false;
> +-		priv->tx_skbuff_dma[i].len = 0;
> +-		priv->tx_skbuff_dma[i].last_segment = false;
> +-		priv->tx_skbuff[i] = NULL;
>   +		for (i = 0; i < DMA_TX_SIZE; i++) {
>   +			struct dma_desc *p;
>   +			if (priv->extend_desc)
> @@ -3300,13 +3305,8 @@
>   +			tx_q->tx_skbuff_dma[i].len = 0;
>   +			tx_q->tx_skbuff_dma[i].last_segment = false;
>   +			tx_q->tx_skbuff[i] = NULL;
> - 		}
> -
> --		priv->tx_skbuff_dma[i].buf = 0;
> --		priv->tx_skbuff_dma[i].map_as_page = false;
> --		priv->tx_skbuff_dma[i].len = 0;
> --		priv->tx_skbuff_dma[i].last_segment = false;
> --		priv->tx_skbuff[i] = NULL;
> ++		}
> ++
>   +		tx_q->dirty_tx = 0;
>   +		tx_q->cur_tx = 0;
>   +
> @@ -3387,17 +3387,10 @@
>   -						 priv->tx_skbuff_dma[i].buf,
>   -						 priv->tx_skbuff_dma[i].len,
>   -						 DMA_TO_DEVICE);
> --		}
>   +	for (i = 0; i < DMA_TX_SIZE; i++)
>   +		stmmac_free_tx_buffer(priv, queue, i);
>   +}
> -
> --		if (priv->tx_skbuff[i]) {
> --			dev_kfree_skb_any(priv->tx_skbuff[i]);
> --			priv->tx_skbuff[i] = NULL;
> --			priv->tx_skbuff_dma[i].buf = 0;
> --			priv->tx_skbuff_dma[i].map_as_page = false;
> --		}
> ++
>   +/**
>   + * free_dma_rx_desc_resources - free RX dma desc resources
>   + * @priv: private structure
> @@ -3426,11 +3419,10 @@
>   +
>   +		kfree(rx_q->rx_skbuff_dma);
>   +		kfree(rx_q->rx_skbuff);
> - 	}
> - }
> -
> - /**
> -- * alloc_dma_desc_resources - alloc TX/RX resources.
> ++	}
> ++}
> ++
> ++/**
>   + * free_dma_tx_desc_resources - free TX dma desc resources
>   + * @priv: private structure
>   + */
> @@ -3463,90 +3455,36 @@
>   +
>   +/**
>   + * alloc_dma_rx_desc_resources - alloc RX resources.
> -  * @priv: private structure
> -  * Description: according to which descriptor can be used (extend or basic)
> -  * this function allocates the resources for TX and RX paths. In case of
> -  * reception, for example, it pre-allocated the RX socket buffer in order to
> -  * allow zero-copy mechanism.
> -  */
> --static int alloc_dma_desc_resources(struct stmmac_priv *priv)
> ++ * @priv: private structure
> ++ * Description: according to which descriptor can be used (extend or basic)
> ++ * this function allocates the resources for TX and RX paths. In case of
> ++ * reception, for example, it pre-allocated the RX socket buffer in order to
> ++ * allow zero-copy mechanism.
> ++ */
>   +static int alloc_dma_rx_desc_resources(struct stmmac_priv *priv)
> - {
> ++{
>   +	u32 rx_count = priv->plat->rx_queues_to_use;
> - 	int ret = -ENOMEM;
> ++	int ret = -ENOMEM;
>   +	u32 queue;
> -
> --	priv->rx_skbuff_dma = kmalloc_array(DMA_RX_SIZE, sizeof(dma_addr_t),
> --					    GFP_KERNEL);
> --	if (!priv->rx_skbuff_dma)
> --		return -ENOMEM;
> ++
>   +	/* RX queues buffers and DMA */
>   +	for (queue = 0; queue < rx_count; queue++) {
>   +		struct stmmac_rx_queue *rx_q = &priv->rx_queue[queue];
> -
> --	priv->rx_skbuff = kmalloc_array(DMA_RX_SIZE, sizeof(struct sk_buff *),
> --					GFP_KERNEL);
> --	if (!priv->rx_skbuff)
> --		goto err_rx_skbuff;
> --
> --	priv->tx_skbuff_dma = kmalloc_array(DMA_TX_SIZE,
> --					    sizeof(*priv->tx_skbuff_dma),
> --					    GFP_KERNEL);
> --	if (!priv->tx_skbuff_dma)
> --		goto err_tx_skbuff_dma;
> --
> --	priv->tx_skbuff = kmalloc_array(DMA_TX_SIZE, sizeof(struct sk_buff *),
> --					GFP_KERNEL);
> --	if (!priv->tx_skbuff)
> --		goto err_tx_skbuff;
> --
> --	if (priv->extend_desc) {
> --		priv->dma_erx = dma_zalloc_coherent(priv->device, DMA_RX_SIZE *
> --						    sizeof(struct
> --							   dma_extended_desc),
> --						    &priv->dma_rx_phy,
> --						    GFP_KERNEL);
> --		if (!priv->dma_erx)
> --			goto err_dma;
> ++
>   +		rx_q->queue_index = queue;
>   +		rx_q->priv_data = priv;
> -
> --		priv->dma_etx = dma_zalloc_coherent(priv->device, DMA_TX_SIZE *
> --						    sizeof(struct
> --							   dma_extended_desc),
> --						    &priv->dma_tx_phy,
> ++
>   +		rx_q->rx_skbuff_dma = kmalloc_array(DMA_RX_SIZE,
>   +						    sizeof(dma_addr_t),
> - 						    GFP_KERNEL);
> --		if (!priv->dma_etx) {
> --			dma_free_coherent(priv->device, DMA_RX_SIZE *
> --					  sizeof(struct dma_extended_desc),
> --					  priv->dma_erx, priv->dma_rx_phy);
> --			goto err_dma;
> --		}
> --	} else {
> --		priv->dma_rx = dma_zalloc_coherent(priv->device, DMA_RX_SIZE *
> --						   sizeof(struct dma_desc),
> --						   &priv->dma_rx_phy,
> --						   GFP_KERNEL);
> --		if (!priv->dma_rx)
> --			goto err_dma;
> ++						    GFP_KERNEL);
>   +		if (!rx_q->rx_skbuff_dma)
>   +			return -ENOMEM;
> -
> --		priv->dma_tx = dma_zalloc_coherent(priv->device, DMA_TX_SIZE *
> --						   sizeof(struct dma_desc),
> --						   &priv->dma_tx_phy,
> --						   GFP_KERNEL);
> --		if (!priv->dma_tx) {
> --			dma_free_coherent(priv->device, DMA_RX_SIZE *
> --					  sizeof(struct dma_desc),
> --					  priv->dma_rx, priv->dma_rx_phy);
> ++
>   +		rx_q->rx_skbuff = kmalloc_array(DMA_RX_SIZE,
>   +						sizeof(struct sk_buff *),
>   +						GFP_KERNEL);
>   +		if (!rx_q->rx_skbuff)
> - 			goto err_dma;
> ++			goto err_dma;
>   +
>   +		if (priv->extend_desc) {
>   +			rx_q->dma_erx = dma_zalloc_coherent(priv->device,
> @@ -3567,19 +3505,12 @@
>   +							   GFP_KERNEL);
>   +			if (!rx_q->dma_rx)
>   +				goto err_dma;
> - 		}
> - 	}
> -
> - 	return 0;
> -
> - err_dma:
> --	kfree(priv->tx_skbuff);
> --err_tx_skbuff:
> --	kfree(priv->tx_skbuff_dma);
> --err_tx_skbuff_dma:
> --	kfree(priv->rx_skbuff);
> --err_rx_skbuff:
> --	kfree(priv->rx_skbuff_dma);
> ++		}
> ++	}
> ++
> ++	return 0;
> ++
> ++err_dma:
>   +	free_dma_rx_desc_resources(priv);
>   +
>   +	return ret;
> @@ -3636,7 +3567,7 @@
>   +							   GFP_KERNEL);
>   +			if (!tx_q->dma_tx)
>   +				goto err_dma_buffers;
> -+		}
> + 		}
>   +	}
>   +
>   +	return 0;
> @@ -3644,9 +3575,9 @@
>   +err_dma_buffers:
>   +	free_dma_tx_desc_resources(priv);
>   +
> - 	return ret;
> - }
> -
> ++	return ret;
> ++}
> ++
>   +/**
>   + * alloc_dma_desc_resources - alloc TX/RX resources.
>   + * @priv: private structure
> @@ -3672,78 +3603,119 @@
>   + * free_dma_desc_resources - free dma desc resources
>   + * @priv: private structure
>   + */
> - static void free_dma_desc_resources(struct stmmac_priv *priv)
> - {
> --	/* Release the DMA TX/RX socket buffers */
> --	dma_free_rx_skbufs(priv);
> --	dma_free_tx_skbufs(priv);
> --
> --	/* Free DMA regions of consistent memory previously allocated */
> --	if (!priv->extend_desc) {
> --		dma_free_coherent(priv->device,
> --				  DMA_TX_SIZE * sizeof(struct dma_desc),
> --				  priv->dma_tx, priv->dma_tx_phy);
> --		dma_free_coherent(priv->device,
> --				  DMA_RX_SIZE * sizeof(struct dma_desc),
> --				  priv->dma_rx, priv->dma_rx_phy);
> --	} else {
> --		dma_free_coherent(priv->device, DMA_TX_SIZE *
> --				  sizeof(struct dma_extended_desc),
> --				  priv->dma_etx, priv->dma_tx_phy);
> --		dma_free_coherent(priv->device, DMA_RX_SIZE *
> --				  sizeof(struct dma_extended_desc),
> --				  priv->dma_erx, priv->dma_rx_phy);
> --	}
> --	kfree(priv->rx_skbuff_dma);
> --	kfree(priv->rx_skbuff);
> --	kfree(priv->tx_skbuff_dma);
> --	kfree(priv->tx_skbuff);
> ++static void free_dma_desc_resources(struct stmmac_priv *priv)
> ++{
>   +	/* Release the DMA RX socket buffers */
>   +	free_dma_rx_desc_resources(priv);
>   +
>   +	/* Release the DMA TX socket buffers */
>   +	free_dma_tx_desc_resources(priv);
> - }
> -
> - /**
> -@@ -1256,19 +1640,104 @@ static void free_dma_desc_resources(stru
> -  */
> - static void stmmac_mac_enable_rx_queues(struct stmmac_priv *priv)
> - {
> --	int rx_count = priv->dma_cap.number_rx_queues;
> --	int queue = 0;
> ++}
> ++
> ++/**
> ++ *  stmmac_mac_enable_rx_queues - Enable MAC rx queues
> ++ *  @priv: driver private structure
> ++ *  Description: It is used for enabling the rx queues in the MAC
> ++ */
> ++static void stmmac_mac_enable_rx_queues(struct stmmac_priv *priv)
> ++{
>   +	u32 rx_queues_count = priv->plat->rx_queues_to_use;
>   +	int queue;
>   +	u8 mode;
>    
> --	/* If GMAC does not have multiple queues, then this is not necessary*/
> --	if (rx_count == 1)
> --		return;
> +-		if (priv->tx_skbuff[i]) {
> +-			dev_kfree_skb_any(priv->tx_skbuff[i]);
> +-			priv->tx_skbuff[i] = NULL;
> +-			priv->tx_skbuff_dma[i].buf = 0;
> +-			priv->tx_skbuff_dma[i].map_as_page = false;
> +-		}
>   +	for (queue = 0; queue < rx_queues_count; queue++) {
>   +		mode = priv->plat->rx_queues_cfg[queue].mode_to_use;
>   +		priv->hw->mac->rx_queue_enable(priv->hw, mode, queue);
> -+	}
> -+}
> + 	}
> + }
>    
> --	/**
> --	 *  If the core is synthesized with multiple rx queues / multiple
> --	 *  dma channels, then rx queues will be disabled by default.
> --	 *  For now only rx queue 0 is enabled.
> --	 */
> --	priv->hw->mac->rx_queue_enable(priv->hw, queue);
> -+/**
> + /**
> +- * alloc_dma_desc_resources - alloc TX/RX resources.
> +- * @priv: private structure
> +- * Description: according to which descriptor can be used (extend or basic)
> +- * this function allocates the resources for TX and RX paths. In case of
> +- * reception, for example, it pre-allocated the RX socket buffer in order to
> +- * allow zero-copy mechanism.
>   + * stmmac_start_rx_dma - start RX DMA channel
>   + * @priv: driver private structure
>   + * @chan: RX channel index
>   + * Description:
>   + * This starts a RX DMA channel
> -+ */
> +  */
> +-static int alloc_dma_desc_resources(struct stmmac_priv *priv)
>   +static void stmmac_start_rx_dma(struct stmmac_priv *priv, u32 chan)
> -+{
> + {
> +-	int ret = -ENOMEM;
> +-
> +-	priv->rx_skbuff_dma = kmalloc_array(DMA_RX_SIZE, sizeof(dma_addr_t),
> +-					    GFP_KERNEL);
> +-	if (!priv->rx_skbuff_dma)
> +-		return -ENOMEM;
> +-
> +-	priv->rx_skbuff = kmalloc_array(DMA_RX_SIZE, sizeof(struct sk_buff *),
> +-					GFP_KERNEL);
> +-	if (!priv->rx_skbuff)
> +-		goto err_rx_skbuff;
> +-
> +-	priv->tx_skbuff_dma = kmalloc_array(DMA_TX_SIZE,
> +-					    sizeof(*priv->tx_skbuff_dma),
> +-					    GFP_KERNEL);
> +-	if (!priv->tx_skbuff_dma)
> +-		goto err_tx_skbuff_dma;
> +-
> +-	priv->tx_skbuff = kmalloc_array(DMA_TX_SIZE, sizeof(struct sk_buff *),
> +-					GFP_KERNEL);
> +-	if (!priv->tx_skbuff)
> +-		goto err_tx_skbuff;
> +-
> +-	if (priv->extend_desc) {
> +-		priv->dma_erx = dma_zalloc_coherent(priv->device, DMA_RX_SIZE *
> +-						    sizeof(struct
> +-							   dma_extended_desc),
> +-						    &priv->dma_rx_phy,
> +-						    GFP_KERNEL);
> +-		if (!priv->dma_erx)
> +-			goto err_dma;
> +-
> +-		priv->dma_etx = dma_zalloc_coherent(priv->device, DMA_TX_SIZE *
> +-						    sizeof(struct
> +-							   dma_extended_desc),
> +-						    &priv->dma_tx_phy,
> +-						    GFP_KERNEL);
> +-		if (!priv->dma_etx) {
> +-			dma_free_coherent(priv->device, DMA_RX_SIZE *
> +-					  sizeof(struct dma_extended_desc),
> +-					  priv->dma_erx, priv->dma_rx_phy);
> +-			goto err_dma;
> +-		}
> +-	} else {
> +-		priv->dma_rx = dma_zalloc_coherent(priv->device, DMA_RX_SIZE *
> +-						   sizeof(struct dma_desc),
> +-						   &priv->dma_rx_phy,
> +-						   GFP_KERNEL);
> +-		if (!priv->dma_rx)
> +-			goto err_dma;
>   +	netdev_dbg(priv->dev, "DMA RX processes started in channel %d\n", chan);
>   +	priv->hw->dma->start_rx(priv->ioaddr, chan);
>   +}
> -+
> +
> +-		priv->dma_tx = dma_zalloc_coherent(priv->device, DMA_TX_SIZE *
> +-						   sizeof(struct dma_desc),
> +-						   &priv->dma_tx_phy,
> +-						   GFP_KERNEL);
> +-		if (!priv->dma_tx) {
> +-			dma_free_coherent(priv->device, DMA_RX_SIZE *
> +-					  sizeof(struct dma_desc),
> +-					  priv->dma_rx, priv->dma_rx_phy);
> +-			goto err_dma;
> +-		}
> +-	}
>   +/**
>   + * stmmac_start_tx_dma - start TX DMA channel
>   + * @priv: driver private structure
> @@ -3756,7 +3728,8 @@
>   +	netdev_dbg(priv->dev, "DMA TX processes started in channel %d\n", chan);
>   +	priv->hw->dma->start_tx(priv->ioaddr, chan);
>   +}
> -+
> +
> +-	return 0;
>   +/**
>   + * stmmac_stop_rx_dma - stop RX DMA channel
>   + * @priv: driver private structure
> @@ -3769,7 +3742,16 @@
>   +	netdev_dbg(priv->dev, "DMA RX processes stopped in channel %d\n", chan);
>   +	priv->hw->dma->stop_rx(priv->ioaddr, chan);
>   +}
> -+
> +
> +-err_dma:
> +-	kfree(priv->tx_skbuff);
> +-err_tx_skbuff:
> +-	kfree(priv->tx_skbuff_dma);
> +-err_tx_skbuff_dma:
> +-	kfree(priv->rx_skbuff);
> +-err_rx_skbuff:
> +-	kfree(priv->rx_skbuff_dma);
> +-	return ret;
>   +/**
>   + * stmmac_stop_tx_dma - stop TX DMA channel
>   + * @priv: driver private structure
> @@ -3781,8 +3763,9 @@
>   +{
>   +	netdev_dbg(priv->dev, "DMA TX processes stopped in channel %d\n", chan);
>   +	priv->hw->dma->stop_tx(priv->ioaddr, chan);
> -+}
> -+
> + }
> +
> +-static void free_dma_desc_resources(struct stmmac_priv *priv)
>   +/**
>   + * stmmac_start_all_dma - start all RX and TX DMA channels
>   + * @priv: driver private structure
> @@ -3790,7 +3773,31 @@
>   + * This starts all the RX and TX DMA channels
>   + */
>   +static void stmmac_start_all_dma(struct stmmac_priv *priv)
> -+{
> + {
> +-	/* Release the DMA TX/RX socket buffers */
> +-	dma_free_rx_skbufs(priv);
> +-	dma_free_tx_skbufs(priv);
> +-
> +-	/* Free DMA regions of consistent memory previously allocated */
> +-	if (!priv->extend_desc) {
> +-		dma_free_coherent(priv->device,
> +-				  DMA_TX_SIZE * sizeof(struct dma_desc),
> +-				  priv->dma_tx, priv->dma_tx_phy);
> +-		dma_free_coherent(priv->device,
> +-				  DMA_RX_SIZE * sizeof(struct dma_desc),
> +-				  priv->dma_rx, priv->dma_rx_phy);
> +-	} else {
> +-		dma_free_coherent(priv->device, DMA_TX_SIZE *
> +-				  sizeof(struct dma_extended_desc),
> +-				  priv->dma_etx, priv->dma_tx_phy);
> +-		dma_free_coherent(priv->device, DMA_RX_SIZE *
> +-				  sizeof(struct dma_extended_desc),
> +-				  priv->dma_erx, priv->dma_rx_phy);
> +-	}
> +-	kfree(priv->rx_skbuff_dma);
> +-	kfree(priv->rx_skbuff);
> +-	kfree(priv->tx_skbuff_dma);
> +-	kfree(priv->tx_skbuff);
>   +	u32 rx_channels_count = priv->plat->rx_queues_to_use;
>   +	u32 tx_channels_count = priv->plat->tx_queues_to_use;
>   +	u32 chan = 0;
> @@ -3800,23 +3807,38 @@
>   +
>   +	for (chan = 0; chan < tx_channels_count; chan++)
>   +		stmmac_start_tx_dma(priv, chan);
> -+}
> -+
> -+/**
> + }
> +
> + /**
> +- *  stmmac_mac_enable_rx_queues - Enable MAC rx queues
> +- *  @priv: driver private structure
> +- *  Description: It is used for enabling the rx queues in the MAC
>   + * stmmac_stop_all_dma - stop all RX and TX DMA channels
>   + * @priv: driver private structure
>   + * Description:
>   + * This stops the RX and TX DMA channels
> -+ */
> +  */
> +-static void stmmac_mac_enable_rx_queues(struct stmmac_priv *priv)
>   +static void stmmac_stop_all_dma(struct stmmac_priv *priv)
> -+{
> + {
> +-	int rx_count = priv->dma_cap.number_rx_queues;
> +-	int queue = 0;
>   +	u32 rx_channels_count = priv->plat->rx_queues_to_use;
>   +	u32 tx_channels_count = priv->plat->tx_queues_to_use;
>   +	u32 chan = 0;
> -+
> +
> +-	/* If GMAC does not have multiple queues, then this is not necessary*/
> +-	if (rx_count == 1)
> +-		return;
>   +	for (chan = 0; chan < rx_channels_count; chan++)
>   +		stmmac_stop_rx_dma(priv, chan);
> -+
> +
> +-	/**
> +-	 *  If the core is synthesized with multiple rx queues / multiple
> +-	 *  dma channels, then rx queues will be disabled by default.
> +-	 *  For now only rx queue 0 is enabled.
> +-	 */
> +-	priv->hw->mac->rx_queue_enable(priv->hw, queue);
>   +	for (chan = 0; chan < tx_channels_count; chan++)
>   +		stmmac_stop_tx_dma(priv, chan);
>    }
> diff --git a/target/linux/uml/patches-4.9/001-um-Allow-building-and-running-on-older-hosts.patch b/target/linux/uml/patches-4.9/001-um-Allow-building-and-running-on-older-hosts.patch
> index 9de557b..501cca8 100644
> --- a/target/linux/uml/patches-4.9/001-um-Allow-building-and-running-on-older-hosts.patch
> +++ b/target/linux/uml/patches-4.9/001-um-Allow-building-and-running-on-older-hosts.patch
> @@ -35,7 +35,7 @@ Signed-off-by: Richard Weinberger <richard at nod.at>
>    	struct iovec iov;
>    
>    	if (have_xstate_support) {
> -@@ -34,9 +35,9 @@ int save_fp_registers(int pid, unsigned
> +@@ -34,9 +35,9 @@ int save_fp_registers(int pid, unsigned
>    		if (ptrace(PTRACE_GETREGSET, pid, NT_X86_XSTATE, &iov) < 0)
>    			return -errno;
>    		return 0;
> diff --git a/target/linux/x86/patches-4.9/100-fix_cs5535_clockevt.patch b/target/linux/x86/patches-4.9/100-fix_cs5535_clockevt.patch
> index c49ddca..c3a7fce 100644
> --- a/target/linux/x86/patches-4.9/100-fix_cs5535_clockevt.patch
> +++ b/target/linux/x86/patches-4.9/100-fix_cs5535_clockevt.patch
> @@ -1,6 +1,6 @@
>   --- a/drivers/clocksource/cs5535-clockevt.c
>   +++ b/drivers/clocksource/cs5535-clockevt.c
> -@@ -129,7 +129,8 @@ static irqreturn_t mfgpt_tick(int irq, v
> +@@ -130,7 +130,8 @@ static irqreturn_t mfgpt_tick(int irq, v
>    		cs5535_mfgpt_write(cs5535_event_clock, MFGPT_REG_SETUP,
>    				MFGPT_SETUP_CNTEN | MFGPT_SETUP_CMP2);
>    




More information about the Lede-dev mailing list