diff mbox series

[LEDE-DEV] kernel: bump 4.9 to 4.9.60

Message ID 1509985028-20257-1-git-send-email-koen.vandeputte@ncentric.com
State Superseded
Headers show
Series [LEDE-DEV] kernel: bump 4.9 to 4.9.60 | expand

Commit Message

Koen Vandeputte Nov. 6, 2017, 4:17 p.m. UTC
Refreshed all patches.

Compiled on: cns3xxx, imx6
Run-tested on: cns3xxx, imx6

Signed-off-by: Koen Vandeputte <koen.vandeputte@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(-)

Comments

John Crispin Nov. 8, 2017, 7:20 a.m. UTC | #1
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@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@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@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@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@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@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@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@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@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@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@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);
>
Koen Vandeputte Nov. 9, 2017, 12:09 p.m. UTC | #2
On 2017-11-08 08:20, John Crispin wrote:
>
>
> 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@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(-) 

<snip>


Hi John,

I'm guessing you are actually referring to the patch below? :

  .../sunxi/patches-4.9/0052-stmmac-form-4-12.patch  | 386 
+++++++++++----------


Something changed early in the source file, causing all parts below to 
be simply moved.
These changes were generated using the target/refresh recipe on running 
the famous KanjiMonster script.


fyi,
In the meantime 4.9.61 arrived so you can skip this one all together if 
you like .. (this one still applies on current trunk, tested 2 min ago)


Thanks for the review,

Koen
diff mbox series

Patch

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@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@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@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@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@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@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@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@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@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@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);