kernel: bump 4.19 to 4.19.34
Refreshed all patches. Removed: - 030-PCI-dwc-skip-MSI-init-if-MSIs-have-been-explicitly-d.patch Altered: - 366-netfilter-nf_flow_table-clean-up-and-fix-dst-handlin.patch - 650-netfilter-add-xt_OFFLOAD-target.patch - 662-remove_pfifo_fast.patch - 332-arc-add-OWRTDTB-section.patch - 100-clocksource-drivers-arch_timer-Workaround-for-Allwin.patch - 702-phy_add_aneg_done_function.patch New symbols: - ARC_IRQ_NO_AUTOSAVE - SUN50I_ERRATUM_UNKNOWN1 Compile-tested: cns3xxx, imx6, sunxi Runtime-tested: cns3xxx, imx6 Signed-off-by: Koen Vandeputte <koen.vandeputte@ncentric.com>
This commit is contained in:
		| @@ -5,12 +5,12 @@ LINUX_RELEASE?=1 | |||||||
| LINUX_VERSION-3.18 = .136 | LINUX_VERSION-3.18 = .136 | ||||||
| LINUX_VERSION-4.9 = .168 | LINUX_VERSION-4.9 = .168 | ||||||
| LINUX_VERSION-4.14 = .111 | LINUX_VERSION-4.14 = .111 | ||||||
| LINUX_VERSION-4.19 = .25 | LINUX_VERSION-4.19 = .34 | ||||||
|  |  | ||||||
| LINUX_KERNEL_HASH-3.18.136 = 48c8775013d23229462134f911bbb14c7935096fcccfb19ce28ecd5f7154f35c | LINUX_KERNEL_HASH-3.18.136 = 48c8775013d23229462134f911bbb14c7935096fcccfb19ce28ecd5f7154f35c | ||||||
| LINUX_KERNEL_HASH-4.9.168 = 4d451c21effad77de323edc9bfeae095aa1faed1a801ef427d66f5763bef091e | LINUX_KERNEL_HASH-4.9.168 = 4d451c21effad77de323edc9bfeae095aa1faed1a801ef427d66f5763bef091e | ||||||
| LINUX_KERNEL_HASH-4.14.111 = f8197d56553f864d1d2e97abbe4fca50f8ab5e72089c292d22f0e4395340a6e8 | LINUX_KERNEL_HASH-4.14.111 = f8197d56553f864d1d2e97abbe4fca50f8ab5e72089c292d22f0e4395340a6e8 | ||||||
| LINUX_KERNEL_HASH-4.19.25 = 7ec71d90d6e96e6f741676d157ac06f30c75be4eaf1649143a3c8b7d4f919731 | LINUX_KERNEL_HASH-4.19.34 = dd795e2a1fddbee5b03c3bb55a1926829cc08df4fdcabce62dda717ba087b8cc | ||||||
|  |  | ||||||
| remove_uri_prefix=$(subst git://,,$(subst http://,,$(subst https://,,$(1)))) | remove_uri_prefix=$(subst git://,,$(subst http://,,$(subst https://,,$(1)))) | ||||||
| sanitize_uri=$(call qstrip,$(subst @,_,$(subst :,_,$(subst .,_,$(subst -,_,$(subst /,_,$(1))))))) | sanitize_uri=$(call qstrip,$(subst @,_,$(subst :,_,$(subst .,_,$(subst -,_,$(subst /,_,$(1))))))) | ||||||
|   | |||||||
| @@ -44,7 +44,7 @@ Signed-off-by: Christian Lamparter <chunkeey@googlemail.com> | |||||||
|   |   | ||||||
|  #include "xhci.h" |  #include "xhci.h" | ||||||
|  #include "xhci-trace.h" |  #include "xhci-trace.h" | ||||||
| @@ -261,6 +263,458 @@ static void xhci_pme_acpi_rtd3_enable(st | @@ -262,6 +264,458 @@ static void xhci_pme_acpi_rtd3_enable(st | ||||||
|  static void xhci_pme_acpi_rtd3_enable(struct pci_dev *dev) { } |  static void xhci_pme_acpi_rtd3_enable(struct pci_dev *dev) { } | ||||||
|  #endif /* CONFIG_ACPI */ |  #endif /* CONFIG_ACPI */ | ||||||
|   |   | ||||||
| @@ -503,7 +503,7 @@ Signed-off-by: Christian Lamparter <chunkeey@googlemail.com> | |||||||
|  /* called during probe() after chip reset completes */ |  /* called during probe() after chip reset completes */ | ||||||
|  static int xhci_pci_setup(struct usb_hcd *hcd) |  static int xhci_pci_setup(struct usb_hcd *hcd) | ||||||
|  { |  { | ||||||
| @@ -299,6 +753,22 @@ static int xhci_pci_probe(struct pci_dev | @@ -300,6 +754,22 @@ static int xhci_pci_probe(struct pci_dev | ||||||
|  	struct hc_driver *driver; |  	struct hc_driver *driver; | ||||||
|  	struct usb_hcd *hcd; |  	struct usb_hcd *hcd; | ||||||
|   |   | ||||||
| @@ -526,7 +526,7 @@ Signed-off-by: Christian Lamparter <chunkeey@googlemail.com> | |||||||
|  	driver = (struct hc_driver *)id->driver_data; |  	driver = (struct hc_driver *)id->driver_data; | ||||||
|   |   | ||||||
|  	/* Prevent runtime suspending between USB-2 and USB-3 initialization */ |  	/* Prevent runtime suspending between USB-2 and USB-3 initialization */ | ||||||
| @@ -360,6 +830,16 @@ static void xhci_pci_remove(struct pci_d | @@ -361,6 +831,16 @@ static void xhci_pci_remove(struct pci_d | ||||||
|  { |  { | ||||||
|  	struct xhci_hcd *xhci; |  	struct xhci_hcd *xhci; | ||||||
|   |   | ||||||
|   | |||||||
| @@ -13,7 +13,7 @@ produce a noisy warning. | |||||||
|  |  | ||||||
| --- a/drivers/usb/host/xhci-pci.c | --- a/drivers/usb/host/xhci-pci.c | ||||||
| +++ b/drivers/usb/host/xhci-pci.c | +++ b/drivers/usb/host/xhci-pci.c | ||||||
| @@ -214,6 +214,7 @@ static void xhci_pci_quirks(struct devic | @@ -215,6 +215,7 @@ static void xhci_pci_quirks(struct devic | ||||||
|  	    pdev->device == 0x0015) { |  	    pdev->device == 0x0015) { | ||||||
|  		xhci->quirks |= XHCI_RESET_ON_RESUME; |  		xhci->quirks |= XHCI_RESET_ON_RESUME; | ||||||
|  		xhci->quirks |= XHCI_ZERO_64B_REGS; |  		xhci->quirks |= XHCI_ZERO_64B_REGS; | ||||||
| @@ -43,7 +43,7 @@ produce a noisy warning. | |||||||
|  		hcd->msi_enabled = 1; |  		hcd->msi_enabled = 1; | ||||||
| --- a/drivers/usb/host/xhci.h | --- a/drivers/usb/host/xhci.h | ||||||
| +++ b/drivers/usb/host/xhci.h | +++ b/drivers/usb/host/xhci.h | ||||||
| @@ -1859,6 +1859,7 @@ struct xhci_hcd { | @@ -1867,6 +1867,7 @@ struct xhci_hcd { | ||||||
|  	/* support xHCI 0.96 spec USB2 software LPM */ |  	/* support xHCI 0.96 spec USB2 software LPM */ | ||||||
|  	unsigned		sw_lpm_support:1; |  	unsigned		sw_lpm_support:1; | ||||||
|  	/* support xHCI 1.0 spec USB2 hardware LPM */ |  	/* support xHCI 1.0 spec USB2 hardware LPM */ | ||||||
|   | |||||||
| @@ -141,7 +141,7 @@ Signed-off-by: John Crispin <blogic@openwrt.org> | |||||||
|  { |  { | ||||||
| --- a/include/linux/gpio/consumer.h | --- a/include/linux/gpio/consumer.h | ||||||
| +++ b/include/linux/gpio/consumer.h | +++ b/include/linux/gpio/consumer.h | ||||||
| @@ -531,6 +531,7 @@ struct gpio_desc *devm_fwnode_get_gpiod_ | @@ -533,6 +533,7 @@ struct gpio_desc *devm_fwnode_get_gpiod_ | ||||||
|   |   | ||||||
|  #if IS_ENABLED(CONFIG_GPIOLIB) && IS_ENABLED(CONFIG_GPIO_SYSFS) |  #if IS_ENABLED(CONFIG_GPIOLIB) && IS_ENABLED(CONFIG_GPIO_SYSFS) | ||||||
|   |   | ||||||
| @@ -149,7 +149,7 @@ Signed-off-by: John Crispin <blogic@openwrt.org> | |||||||
|  int gpiod_export(struct gpio_desc *desc, bool direction_may_change); |  int gpiod_export(struct gpio_desc *desc, bool direction_may_change); | ||||||
|  int gpiod_export_link(struct device *dev, const char *name, |  int gpiod_export_link(struct device *dev, const char *name, | ||||||
|  		      struct gpio_desc *desc); |  		      struct gpio_desc *desc); | ||||||
| @@ -538,6 +539,13 @@ void gpiod_unexport(struct gpio_desc *de | @@ -540,6 +541,13 @@ void gpiod_unexport(struct gpio_desc *de | ||||||
|   |   | ||||||
|  #else  /* CONFIG_GPIOLIB && CONFIG_GPIO_SYSFS */ |  #else  /* CONFIG_GPIOLIB && CONFIG_GPIO_SYSFS */ | ||||||
|   |   | ||||||
|   | |||||||
| @@ -171,7 +171,7 @@ | |||||||
|  #define UDP_CORK	1	/* Never send partially complete segments */ |  #define UDP_CORK	1	/* Never send partially complete segments */ | ||||||
| --- a/net/netfilter/nf_conntrack_core.c | --- a/net/netfilter/nf_conntrack_core.c | ||||||
| +++ b/net/netfilter/nf_conntrack_core.c | +++ b/net/netfilter/nf_conntrack_core.c | ||||||
| @@ -262,8 +262,8 @@ static bool ipv4_pkt_to_tuple(const stru | @@ -262,8 +262,8 @@ nf_ct_get_tuple(const struct sk_buff *sk | ||||||
|   |   | ||||||
|  	switch (l3num) { |  	switch (l3num) { | ||||||
|  	case NFPROTO_IPV4: |  	case NFPROTO_IPV4: | ||||||
| @@ -241,7 +241,7 @@ | |||||||
|   */ |   */ | ||||||
| --- a/net/ipv6/datagram.c | --- a/net/ipv6/datagram.c | ||||||
| +++ b/net/ipv6/datagram.c | +++ b/net/ipv6/datagram.c | ||||||
| @@ -477,7 +477,7 @@ int ipv6_recv_error(struct sock *sk, str | @@ -478,7 +478,7 @@ int ipv6_recv_error(struct sock *sk, str | ||||||
|  				ipv6_iface_scope_id(&sin->sin6_addr, |  				ipv6_iface_scope_id(&sin->sin6_addr, | ||||||
|  						    IP6CB(skb)->iif); |  						    IP6CB(skb)->iif); | ||||||
|  		} else { |  		} else { | ||||||
| @@ -250,7 +250,7 @@ | |||||||
|  					       &sin->sin6_addr); |  					       &sin->sin6_addr); | ||||||
|  			sin->sin6_scope_id = 0; |  			sin->sin6_scope_id = 0; | ||||||
|  		} |  		} | ||||||
| @@ -829,12 +829,12 @@ int ip6_datagram_send_ctl(struct net *ne | @@ -828,12 +828,12 @@ int ip6_datagram_send_ctl(struct net *ne | ||||||
|  			} |  			} | ||||||
|   |   | ||||||
|  			if (fl6->flowlabel&IPV6_FLOWINFO_MASK) { |  			if (fl6->flowlabel&IPV6_FLOWINFO_MASK) { | ||||||
| @@ -303,7 +303,7 @@ | |||||||
|  #endif /* _LINUX_TYPES_H */ |  #endif /* _LINUX_TYPES_H */ | ||||||
| --- a/net/ipv4/af_inet.c | --- a/net/ipv4/af_inet.c | ||||||
| +++ b/net/ipv4/af_inet.c | +++ b/net/ipv4/af_inet.c | ||||||
| @@ -1422,8 +1422,8 @@ struct sk_buff **inet_gro_receive(struct | @@ -1422,8 +1422,8 @@ struct sk_buff *inet_gro_receive(struct | ||||||
|  	if (unlikely(ip_fast_csum((u8 *)iph, 5))) |  	if (unlikely(ip_fast_csum((u8 *)iph, 5))) | ||||||
|  		goto out_unlock; |  		goto out_unlock; | ||||||
|   |   | ||||||
| @@ -556,7 +556,7 @@ | |||||||
|  			goto next_ht; |  			goto next_ht; | ||||||
| --- a/net/ipv6/ip6_offload.c | --- a/net/ipv6/ip6_offload.c | ||||||
| +++ b/net/ipv6/ip6_offload.c | +++ b/net/ipv6/ip6_offload.c | ||||||
| @@ -223,7 +223,7 @@ static struct sk_buff **ipv6_gro_receive | @@ -223,7 +223,7 @@ static struct sk_buff *ipv6_gro_receive( | ||||||
|  			continue; |  			continue; | ||||||
|   |   | ||||||
|  		iph2 = (struct ipv6hdr *)(p->data + off); |  		iph2 = (struct ipv6hdr *)(p->data + off); | ||||||
| @@ -648,7 +648,7 @@ | |||||||
|  		if (xb) |  		if (xb) | ||||||
|  			return i * 32 + 31 - __fls(ntohl(xb)); |  			return i * 32 + 31 - __fls(ntohl(xb)); | ||||||
|  	} |  	} | ||||||
| @@ -876,17 +880,18 @@ static inline int ip6_default_np_autolab | @@ -876,17 +880,18 @@ static inline int ip6_multipath_hash_pol | ||||||
|  static inline void ip6_flow_hdr(struct ipv6hdr *hdr, unsigned int tclass, |  static inline void ip6_flow_hdr(struct ipv6hdr *hdr, unsigned int tclass, | ||||||
|  				__be32 flowlabel) |  				__be32 flowlabel) | ||||||
|  { |  { | ||||||
| @@ -762,7 +762,7 @@ | |||||||
|   |   | ||||||
| --- a/net/ipv6/netfilter/nf_log_ipv6.c | --- a/net/ipv6/netfilter/nf_log_ipv6.c | ||||||
| +++ b/net/ipv6/netfilter/nf_log_ipv6.c | +++ b/net/ipv6/netfilter/nf_log_ipv6.c | ||||||
| @@ -66,9 +66,9 @@ static void dump_ipv6_packet(struct nf_l | @@ -66,9 +66,9 @@ static void dump_ipv6_packet(struct net | ||||||
|  	/* Max length: 44 "LEN=65535 TC=255 HOPLIMIT=255 FLOWLBL=FFFFF " */ |  	/* Max length: 44 "LEN=65535 TC=255 HOPLIMIT=255 FLOWLBL=FFFFF " */ | ||||||
|  	nf_log_buf_add(m, "LEN=%zu TC=%u HOPLIMIT=%u FLOWLBL=%u ", |  	nf_log_buf_add(m, "LEN=%zu TC=%u HOPLIMIT=%u FLOWLBL=%u ", | ||||||
|  	       ntohs(ih->payload_len) + sizeof(struct ipv6hdr), |  	       ntohs(ih->payload_len) + sizeof(struct ipv6hdr), | ||||||
| @@ -849,7 +849,7 @@ | |||||||
|   |   | ||||||
| --- a/net/ipv4/tcp_offload.c | --- a/net/ipv4/tcp_offload.c | ||||||
| +++ b/net/ipv4/tcp_offload.c | +++ b/net/ipv4/tcp_offload.c | ||||||
| @@ -226,7 +226,7 @@ struct sk_buff **tcp_gro_receive(struct | @@ -226,7 +226,7 @@ struct sk_buff *tcp_gro_receive(struct l | ||||||
|   |   | ||||||
|  		th2 = tcp_hdr(p); |  		th2 = tcp_hdr(p); | ||||||
|   |   | ||||||
|   | |||||||
| @@ -127,7 +127,7 @@ it on BCM4708 family. | |||||||
|  /* |  /* | ||||||
| --- a/drivers/usb/host/xhci.h | --- a/drivers/usb/host/xhci.h | ||||||
| +++ b/drivers/usb/host/xhci.h | +++ b/drivers/usb/host/xhci.h | ||||||
| @@ -1848,6 +1848,7 @@ struct xhci_hcd { | @@ -1856,6 +1856,7 @@ struct xhci_hcd { | ||||||
|  #define XHCI_ZERO_64B_REGS	BIT_ULL(32) |  #define XHCI_ZERO_64B_REGS	BIT_ULL(32) | ||||||
|  #define XHCI_RESET_PLL_ON_DISCONNECT	BIT_ULL(34) |  #define XHCI_RESET_PLL_ON_DISCONNECT	BIT_ULL(34) | ||||||
|  #define XHCI_SNPS_BROKEN_SUSPEND    BIT_ULL(35) |  #define XHCI_SNPS_BROKEN_SUSPEND    BIT_ULL(35) | ||||||
|   | |||||||
| @@ -61,7 +61,7 @@ Signed-off-by: Rafał Miłecki <rafal@milecki.pl> | |||||||
|  #include <linux/clockchips.h> |  #include <linux/clockchips.h> | ||||||
|  #include <linux/clocksource.h> |  #include <linux/clocksource.h> | ||||||
|  #include <linux/interrupt.h> |  #include <linux/interrupt.h> | ||||||
| @@ -864,6 +865,16 @@ static void arch_timer_of_configure_rate | @@ -919,6 +920,16 @@ static void arch_timer_of_configure_rate | ||||||
|  	if (of_property_read_u32(np, "clock-frequency", &arch_timer_rate)) |  	if (of_property_read_u32(np, "clock-frequency", &arch_timer_rate)) | ||||||
|  		arch_timer_rate = rate; |  		arch_timer_rate = rate; | ||||||
|   |   | ||||||
|   | |||||||
| @@ -22,8 +22,6 @@ Signed-off-by: Paul Burton <paul.burton@mips.com> | |||||||
|  arch/mips/bcm47xx/workarounds.c | 1 + |  arch/mips/bcm47xx/workarounds.c | 1 + | ||||||
|  1 file changed, 1 insertion(+) |  1 file changed, 1 insertion(+) | ||||||
|  |  | ||||||
| diff --git a/arch/mips/bcm47xx/workarounds.c b/arch/mips/bcm47xx/workarounds.c |  | ||||||
| index 46eddbe..0ab95dd 100644 |  | ||||||
| --- a/arch/mips/bcm47xx/workarounds.c | --- a/arch/mips/bcm47xx/workarounds.c | ||||||
| +++ b/arch/mips/bcm47xx/workarounds.c | +++ b/arch/mips/bcm47xx/workarounds.c | ||||||
| @@ -24,6 +24,7 @@ void __init bcm47xx_workarounds(void) | @@ -24,6 +24,7 @@ void __init bcm47xx_workarounds(void) | ||||||
| @@ -34,6 +32,3 @@ index 46eddbe..0ab95dd 100644 | |||||||
|  	case BCM47XX_BOARD_NETGEAR_WNDR3400_V3: |  	case BCM47XX_BOARD_NETGEAR_WNDR3400_V3: | ||||||
|  		bcm47xx_workarounds_enable_usb_power(21); |  		bcm47xx_workarounds_enable_usb_power(21); | ||||||
|  		break; |  		break; | ||||||
| --  |  | ||||||
| 1.9.1 |  | ||||||
|  |  | ||||||
|   | |||||||
| @@ -1,6 +1,6 @@ | |||||||
| --- a/drivers/pci/probe.c | --- a/drivers/pci/probe.c | ||||||
| +++ b/drivers/pci/probe.c | +++ b/drivers/pci/probe.c | ||||||
| @@ -2619,7 +2619,8 @@ static void pcie_write_mrrs(struct pci_d | @@ -2629,7 +2629,8 @@ static void pcie_write_mrrs(struct pci_d | ||||||
|  	 * In the "safe" case, do not configure the MRRS.  There appear to be |  	 * In the "safe" case, do not configure the MRRS.  There appear to be | ||||||
|  	 * issues with setting MRRS to 0 on a number of devices. |  	 * issues with setting MRRS to 0 on a number of devices. | ||||||
|  	 */ |  	 */ | ||||||
|   | |||||||
| @@ -12,8 +12,6 @@ Signed-off-by: Linus Walleij <linus.walleij@linaro.org> | |||||||
|  arch/arm/boot/dts/gemini-dlink-dir-685.dts | 82 ++++++++++++---------- |  arch/arm/boot/dts/gemini-dlink-dir-685.dts | 82 ++++++++++++---------- | ||||||
|  1 file changed, 44 insertions(+), 38 deletions(-) |  1 file changed, 44 insertions(+), 38 deletions(-) | ||||||
|  |  | ||||||
| diff --git a/arch/arm/boot/dts/gemini-dlink-dir-685.dts b/arch/arm/boot/dts/gemini-dlink-dir-685.dts |  | ||||||
| index 9b2824816ddc..50ff65d95f26 100644 |  | ||||||
| --- a/arch/arm/boot/dts/gemini-dlink-dir-685.dts | --- a/arch/arm/boot/dts/gemini-dlink-dir-685.dts | ||||||
| +++ b/arch/arm/boot/dts/gemini-dlink-dir-685.dts | +++ b/arch/arm/boot/dts/gemini-dlink-dir-685.dts | ||||||
| @@ -267,44 +267,50 @@ | @@ -267,44 +267,50 @@ | ||||||
| @@ -105,6 +103,3 @@ index 9b2824816ddc..50ff65d95f26 100644 | |||||||
|  			}; |  			}; | ||||||
|  		}; |  		}; | ||||||
|   |   | ||||||
| --  |  | ||||||
| 2.20.1 |  | ||||||
|  |  | ||||||
|   | |||||||
| @@ -12,8 +12,6 @@ Signed-off-by: Linus Walleij <linus.walleij@linaro.org> | |||||||
|  arch/arm/boot/dts/gemini-dlink-dir-685.dts | 5 +++-- |  arch/arm/boot/dts/gemini-dlink-dir-685.dts | 5 +++-- | ||||||
|  1 file changed, 3 insertions(+), 2 deletions(-) |  1 file changed, 3 insertions(+), 2 deletions(-) | ||||||
|  |  | ||||||
| diff --git a/arch/arm/boot/dts/gemini-dlink-dir-685.dts b/arch/arm/boot/dts/gemini-dlink-dir-685.dts |  | ||||||
| index 50ff65d95f26..7db30cc9d189 100644 |  | ||||||
| --- a/arch/arm/boot/dts/gemini-dlink-dir-685.dts | --- a/arch/arm/boot/dts/gemini-dlink-dir-685.dts | ||||||
| +++ b/arch/arm/boot/dts/gemini-dlink-dir-685.dts | +++ b/arch/arm/boot/dts/gemini-dlink-dir-685.dts | ||||||
| @@ -20,7 +20,7 @@ | @@ -20,7 +20,7 @@ | ||||||
| @@ -35,6 +33,3 @@ index 50ff65d95f26..7db30cc9d189 100644 | |||||||
|  					reg = <0x00040000 0x01f40000>; |  					reg = <0x00040000 0x01f40000>; | ||||||
|  					read-only; |  					read-only; | ||||||
|  				}; |  				}; | ||||||
| --  |  | ||||||
| 2.20.1 |  | ||||||
|  |  | ||||||
|   | |||||||
| @@ -1,48 +0,0 @@ | |||||||
| From 26a3cdb73644090ff9a2fb68775ef61d361a8883 Mon Sep 17 00:00:00 2001 |  | ||||||
| From: Lucas Stach <l.stach@pengutronix.de> |  | ||||||
| Date: Wed, 27 Feb 2019 17:52:19 +0100 |  | ||||||
| Subject: [PATCH] PCI: dwc: skip MSI init if MSIs have been explicitly disabled |  | ||||||
|  |  | ||||||
| commit 3afc8299f39a27b60e1519a28e18878ce878e7dd upstream. |  | ||||||
|  |  | ||||||
| Since 7c5925afbc58 (PCI: dwc: Move MSI IRQs allocation to IRQ domains |  | ||||||
| hierarchical API) the MSI init claims one of the controller IRQs as a |  | ||||||
| chained IRQ line for the MSI controller. On some designs, like the i.MX6, |  | ||||||
| this line is shared with a PCIe legacy IRQ. When the line is claimed for |  | ||||||
| the MSI domain, any device trying to use this legacy IRQs will fail to |  | ||||||
| request this IRQ line. |  | ||||||
|  |  | ||||||
| As MSI and legacy IRQs are already mutually exclusive on the DWC core, |  | ||||||
| as the core won't forward any legacy IRQs once any MSI has been enabled, |  | ||||||
| users wishing to use legacy IRQs already need to explictly disable MSI |  | ||||||
| support (usually via the pci=nomsi kernel commandline option). To avoid |  | ||||||
| any issues with MSI conflicting with legacy IRQs, just skip all of the |  | ||||||
| DWC MSI initalization, including the IRQ line claim, when MSI is disabled. |  | ||||||
|  |  | ||||||
| Fixes: 7c5925afbc58 ("PCI: dwc: Move MSI IRQs allocation to IRQ domains hierarchical API") |  | ||||||
| Tested-by: Tim Harvey <tharvey@gateworks.com> |  | ||||||
| Signed-off-by: Lucas Stach <l.stach@pengutronix.de> |  | ||||||
| Signed-off-by: Lorenzo Pieralisi <lorenzo.pieralisi@arm.com> |  | ||||||
| Acked-by: Gustavo Pimentel <gustavo.pimentel@synopsys.com> |  | ||||||
| Cc: stable@vger.kernel.org |  | ||||||
| Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> |  | ||||||
| --- |  | ||||||
|  drivers/pci/controller/dwc/pcie-designware-host.c | 2 +- |  | ||||||
|  1 file changed, 1 insertion(+), 1 deletion(-) |  | ||||||
|  |  | ||||||
| diff --git a/drivers/pci/controller/dwc/pcie-designware-host.c b/drivers/pci/controller/dwc/pcie-designware-host.c |  | ||||||
| index 0fa9e8fdce66..b56e22262a77 100644 |  | ||||||
| --- a/drivers/pci/controller/dwc/pcie-designware-host.c |  | ||||||
| +++ b/drivers/pci/controller/dwc/pcie-designware-host.c |  | ||||||
| @@ -439,7 +439,7 @@ int dw_pcie_host_init(struct pcie_port *pp) |  | ||||||
|  	if (ret) |  | ||||||
|  		pci->num_viewport = 2; |  | ||||||
|   |  | ||||||
| -	if (IS_ENABLED(CONFIG_PCI_MSI)) { |  | ||||||
| +	if (IS_ENABLED(CONFIG_PCI_MSI) && pci_msi_enabled()) { |  | ||||||
|  		/* |  | ||||||
|  		 * If a specific SoC driver needs to change the |  | ||||||
|  		 * default number of vectors, it needs to implement |  | ||||||
| --  |  | ||||||
| 2.17.1 |  | ||||||
|  |  | ||||||
| @@ -31,8 +31,6 @@ Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> | |||||||
|  drivers/tty/serial/ar933x_uart.c | 24 ++++++++---------------- |  drivers/tty/serial/ar933x_uart.c | 24 ++++++++---------------- | ||||||
|  1 file changed, 8 insertions(+), 16 deletions(-) |  1 file changed, 8 insertions(+), 16 deletions(-) | ||||||
|  |  | ||||||
| diff --git a/drivers/tty/serial/ar933x_uart.c b/drivers/tty/serial/ar933x_uart.c |  | ||||||
| index db5df3d..3bdd56a 100644 |  | ||||||
| --- a/drivers/tty/serial/ar933x_uart.c | --- a/drivers/tty/serial/ar933x_uart.c | ||||||
| +++ b/drivers/tty/serial/ar933x_uart.c | +++ b/drivers/tty/serial/ar933x_uart.c | ||||||
| @@ -49,11 +49,6 @@ struct ar933x_uart_port { | @@ -49,11 +49,6 @@ struct ar933x_uart_port { | ||||||
| @@ -47,7 +45,7 @@ index db5df3d..3bdd56a 100644 | |||||||
|  static inline unsigned int ar933x_uart_read(struct ar933x_uart_port *up, |  static inline unsigned int ar933x_uart_read(struct ar933x_uart_port *up, | ||||||
|  					    int offset) |  					    int offset) | ||||||
|  { |  { | ||||||
| @@ -508,6 +503,7 @@ static int ar933x_uart_verify_port(struct uart_port *port, | @@ -508,6 +503,7 @@ static const struct uart_ops ar933x_uart | ||||||
|  	.verify_port	= ar933x_uart_verify_port, |  	.verify_port	= ar933x_uart_verify_port, | ||||||
|  }; |  }; | ||||||
|   |   | ||||||
| @@ -55,7 +53,7 @@ index db5df3d..3bdd56a 100644 | |||||||
|  static struct ar933x_uart_port * |  static struct ar933x_uart_port * | ||||||
|  ar933x_console_ports[CONFIG_SERIAL_AR933X_NR_UARTS]; |  ar933x_console_ports[CONFIG_SERIAL_AR933X_NR_UARTS]; | ||||||
|   |   | ||||||
| @@ -604,14 +600,7 @@ static int ar933x_uart_console_setup(struct console *co, char *options) | @@ -604,14 +600,7 @@ static struct console ar933x_uart_consol | ||||||
|  	.index		= -1, |  	.index		= -1, | ||||||
|  	.data		= &ar933x_uart_driver, |  	.data		= &ar933x_uart_driver, | ||||||
|  }; |  }; | ||||||
| @@ -71,7 +69,7 @@ index db5df3d..3bdd56a 100644 | |||||||
|   |   | ||||||
|  static struct uart_driver ar933x_uart_driver = { |  static struct uart_driver ar933x_uart_driver = { | ||||||
|  	.owner		= THIS_MODULE, |  	.owner		= THIS_MODULE, | ||||||
| @@ -700,7 +689,9 @@ static int ar933x_uart_probe(struct platform_device *pdev) | @@ -700,7 +689,9 @@ static int ar933x_uart_probe(struct plat | ||||||
|  	baud = ar933x_uart_get_baud(port->uartclk, 0, AR933X_UART_MAX_STEP); |  	baud = ar933x_uart_get_baud(port->uartclk, 0, AR933X_UART_MAX_STEP); | ||||||
|  	up->max_baud = min_t(unsigned int, baud, AR933X_UART_MAX_BAUD); |  	up->max_baud = min_t(unsigned int, baud, AR933X_UART_MAX_BAUD); | ||||||
|   |   | ||||||
| @@ -94,6 +92,3 @@ index db5df3d..3bdd56a 100644 | |||||||
|   |   | ||||||
|  	ret = uart_register_driver(&ar933x_uart_driver); |  	ret = uart_register_driver(&ar933x_uart_driver); | ||||||
|  	if (ret) |  	if (ret) | ||||||
| --  |  | ||||||
| 1.9.1 |  | ||||||
|  |  | ||||||
|   | |||||||
| @@ -10,7 +10,7 @@ Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org> | |||||||
|  |  | ||||||
| --- a/net/netfilter/nf_flow_table_core.c | --- a/net/netfilter/nf_flow_table_core.c | ||||||
| +++ b/net/netfilter/nf_flow_table_core.c | +++ b/net/netfilter/nf_flow_table_core.c | ||||||
| @@ -519,5 +519,35 @@ void nf_flow_table_free(struct nf_flowta | @@ -520,5 +520,35 @@ void nf_flow_table_free(struct nf_flowta | ||||||
|  } |  } | ||||||
|  EXPORT_SYMBOL_GPL(nf_flow_table_free); |  EXPORT_SYMBOL_GPL(nf_flow_table_free); | ||||||
|   |   | ||||||
| @@ -48,7 +48,7 @@ Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org> | |||||||
|  MODULE_AUTHOR("Pablo Neira Ayuso <pablo@netfilter.org>"); |  MODULE_AUTHOR("Pablo Neira Ayuso <pablo@netfilter.org>"); | ||||||
| --- a/net/netfilter/nft_flow_offload.c | --- a/net/netfilter/nft_flow_offload.c | ||||||
| +++ b/net/netfilter/nft_flow_offload.c | +++ b/net/netfilter/nft_flow_offload.c | ||||||
| @@ -193,47 +193,14 @@ static struct nft_expr_type nft_flow_off | @@ -196,47 +196,14 @@ static struct nft_expr_type nft_flow_off | ||||||
|  	.owner		= THIS_MODULE, |  	.owner		= THIS_MODULE, | ||||||
|  }; |  }; | ||||||
|   |   | ||||||
|   | |||||||
| @@ -38,7 +38,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name> | |||||||
|  		return NF_ACCEPT; |  		return NF_ACCEPT; | ||||||
| --- a/net/netfilter/nft_flow_offload.c | --- a/net/netfilter/nft_flow_offload.c | ||||||
| +++ b/net/netfilter/nft_flow_offload.c | +++ b/net/netfilter/nft_flow_offload.c | ||||||
| @@ -17,27 +17,38 @@ struct nft_flow_offload { | @@ -18,13 +18,11 @@ struct nft_flow_offload { | ||||||
|  	struct nft_flowtable	*flowtable; |  	struct nft_flowtable	*flowtable; | ||||||
|  }; |  }; | ||||||
|   |   | ||||||
| @@ -56,14 +56,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name> | |||||||
|  	struct flowi fl; |  	struct flowi fl; | ||||||
|   |   | ||||||
|  	memset(&fl, 0, sizeof(fl)); |  	memset(&fl, 0, sizeof(fl)); | ||||||
|  	switch (nft_pf(pkt)) { | @@ -39,8 +37,21 @@ static int nft_flow_route(const struct n | ||||||
|  	case NFPROTO_IPV4: |  | ||||||
| -		fl.u.ip4.daddr = ct->tuplehash[!dir].tuple.dst.u3.ip; |  | ||||||
| +		fl.u.ip4.daddr = ct->tuplehash[dir].tuple.src.u3.ip; |  | ||||||
|  		break; |  | ||||||
|  	case NFPROTO_IPV6: |  | ||||||
| -		fl.u.ip6.daddr = ct->tuplehash[!dir].tuple.dst.u3.in6; |  | ||||||
| +		fl.u.ip6.daddr = ct->tuplehash[dir].tuple.src.u3.in6; |  | ||||||
|  		break; |  		break; | ||||||
|  	} |  	} | ||||||
|   |   | ||||||
|   | |||||||
| @@ -21,7 +21,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name> | |||||||
|  |  | ||||||
| --- a/net/netfilter/nf_conntrack_core.c | --- a/net/netfilter/nf_conntrack_core.c | ||||||
| +++ b/net/netfilter/nf_conntrack_core.c | +++ b/net/netfilter/nf_conntrack_core.c | ||||||
| @@ -1119,18 +1119,6 @@ static bool gc_worker_can_early_drop(con | @@ -1143,18 +1143,6 @@ static bool gc_worker_can_early_drop(con | ||||||
|  	return false; |  	return false; | ||||||
|  } |  } | ||||||
|   |   | ||||||
| @@ -40,7 +40,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name> | |||||||
|  static void gc_worker(struct work_struct *work) |  static void gc_worker(struct work_struct *work) | ||||||
|  { |  { | ||||||
|  	unsigned int min_interval = max(HZ / GC_MAX_BUCKETS_DIV, 1u); |  	unsigned int min_interval = max(HZ / GC_MAX_BUCKETS_DIV, 1u); | ||||||
| @@ -1167,10 +1155,8 @@ static void gc_worker(struct work_struct | @@ -1191,10 +1179,8 @@ static void gc_worker(struct work_struct | ||||||
|  			tmp = nf_ct_tuplehash_to_ctrack(h); |  			tmp = nf_ct_tuplehash_to_ctrack(h); | ||||||
|   |   | ||||||
|  			scanned++; |  			scanned++; | ||||||
| @@ -54,7 +54,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name> | |||||||
|  				nf_ct_gc_expired(tmp); |  				nf_ct_gc_expired(tmp); | ||||||
| --- a/net/netfilter/nf_flow_table_core.c | --- a/net/netfilter/nf_flow_table_core.c | ||||||
| +++ b/net/netfilter/nf_flow_table_core.c | +++ b/net/netfilter/nf_flow_table_core.c | ||||||
| @@ -182,8 +182,27 @@ static const struct rhashtable_params nf | @@ -183,8 +183,27 @@ static const struct rhashtable_params nf | ||||||
|  	.automatic_shrinking	= true, |  	.automatic_shrinking	= true, | ||||||
|  }; |  }; | ||||||
|   |   | ||||||
| @@ -82,7 +82,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name> | |||||||
|  	flow->timeout = (u32)jiffies; |  	flow->timeout = (u32)jiffies; | ||||||
|   |   | ||||||
|  	rhashtable_insert_fast(&flow_table->rhashtable, |  	rhashtable_insert_fast(&flow_table->rhashtable, | ||||||
| @@ -304,6 +323,8 @@ static int nf_flow_offload_gc_step(struc | @@ -305,6 +324,8 @@ static int nf_flow_offload_gc_step(struc | ||||||
|  	rhashtable_walk_start(&hti); |  	rhashtable_walk_start(&hti); | ||||||
|   |   | ||||||
|  	while ((tuplehash = rhashtable_walk_next(&hti))) { |  	while ((tuplehash = rhashtable_walk_next(&hti))) { | ||||||
| @@ -91,7 +91,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name> | |||||||
|  		if (IS_ERR(tuplehash)) { |  		if (IS_ERR(tuplehash)) { | ||||||
|  			err = PTR_ERR(tuplehash); |  			err = PTR_ERR(tuplehash); | ||||||
|  			if (err != -EAGAIN) |  			if (err != -EAGAIN) | ||||||
| @@ -316,9 +337,13 @@ static int nf_flow_offload_gc_step(struc | @@ -317,9 +338,13 @@ static int nf_flow_offload_gc_step(struc | ||||||
|   |   | ||||||
|  		flow = container_of(tuplehash, struct flow_offload, tuplehash[0]); |  		flow = container_of(tuplehash, struct flow_offload, tuplehash[0]); | ||||||
|   |   | ||||||
|   | |||||||
| @@ -12,7 +12,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name> | |||||||
|  |  | ||||||
| --- a/net/netfilter/nf_flow_table_core.c | --- a/net/netfilter/nf_flow_table_core.c | ||||||
| +++ b/net/netfilter/nf_flow_table_core.c | +++ b/net/netfilter/nf_flow_table_core.c | ||||||
| @@ -230,6 +230,9 @@ static void flow_offload_del(struct nf_f | @@ -231,6 +231,9 @@ static void flow_offload_del(struct nf_f | ||||||
|  	e = container_of(flow, struct flow_offload_entry, flow); |  	e = container_of(flow, struct flow_offload_entry, flow); | ||||||
|  	clear_bit(IPS_OFFLOAD_BIT, &e->ct->status); |  	clear_bit(IPS_OFFLOAD_BIT, &e->ct->status); | ||||||
|   |   | ||||||
|   | |||||||
| @@ -283,6 +283,7 @@ CONFIG_ARCH_MMAP_RND_COMPAT_BITS_MIN=8 | |||||||
| # CONFIG_ARCH_ZYNQMP is not set | # CONFIG_ARCH_ZYNQMP is not set | ||||||
| # CONFIG_ARCNET is not set | # CONFIG_ARCNET is not set | ||||||
| # CONFIG_ARC_EMAC is not set | # CONFIG_ARC_EMAC is not set | ||||||
|  | # CONFIG_ARC_IRQ_NO_AUTOSAVE is not set | ||||||
| # CONFIG_ARM64_ERRATUM_1024718 is not set | # CONFIG_ARM64_ERRATUM_1024718 is not set | ||||||
| # CONFIG_ARM64_ERRATUM_819472 is not set | # CONFIG_ARM64_ERRATUM_819472 is not set | ||||||
| # CONFIG_ARM64_ERRATUM_824069 is not set | # CONFIG_ARM64_ERRATUM_824069 is not set | ||||||
| @@ -5056,6 +5057,7 @@ CONFIG_STRIP_ASM_SYMS=y | |||||||
| # CONFIG_ST_UVIS25 is not set | # CONFIG_ST_UVIS25 is not set | ||||||
| # CONFIG_SUN4I_GPADC is not set | # CONFIG_SUN4I_GPADC is not set | ||||||
| # CONFIG_SUN50I_DE2_BUS is not set | # CONFIG_SUN50I_DE2_BUS is not set | ||||||
|  | # CONFIG_SUN50I_ERRATUM_UNKNOWN1 is not set | ||||||
| # CONFIG_SUNDANCE is not set | # CONFIG_SUNDANCE is not set | ||||||
| # CONFIG_SUNGEM is not set | # CONFIG_SUNGEM is not set | ||||||
| # CONFIG_SUNRPC is not set | # CONFIG_SUNRPC is not set | ||||||
|   | |||||||
| @@ -15,7 +15,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name> | |||||||
|  |  | ||||||
| --- a/Makefile | --- a/Makefile | ||||||
| +++ b/Makefile | +++ b/Makefile | ||||||
| @@ -1227,7 +1227,6 @@ all: modules | @@ -1232,7 +1232,6 @@ all: modules | ||||||
|   |   | ||||||
|  PHONY += modules |  PHONY += modules | ||||||
|  modules: $(vmlinux-dirs) $(if $(KBUILD_BUILTIN),vmlinux) modules.builtin |  modules: $(vmlinux-dirs) $(if $(KBUILD_BUILTIN),vmlinux) modules.builtin | ||||||
| @@ -23,7 +23,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name> | |||||||
|  	@$(kecho) '  Building modules, stage 2.'; |  	@$(kecho) '  Building modules, stage 2.'; | ||||||
|  	$(Q)$(MAKE) -f $(srctree)/scripts/Makefile.modpost |  	$(Q)$(MAKE) -f $(srctree)/scripts/Makefile.modpost | ||||||
|   |   | ||||||
| @@ -1256,7 +1255,6 @@ _modinst_: | @@ -1261,7 +1260,6 @@ _modinst_: | ||||||
|  		rm -f $(MODLIB)/build ; \ |  		rm -f $(MODLIB)/build ; \ | ||||||
|  		ln -s $(CURDIR) $(MODLIB)/build ; \ |  		ln -s $(CURDIR) $(MODLIB)/build ; \ | ||||||
|  	fi |  	fi | ||||||
|   | |||||||
| @@ -33,7 +33,7 @@ Signed-off-by: Gabor Juhos <juhosg@openwrt.org> | |||||||
|  # Read KERNELRELEASE from include/config/kernel.release (if it exists) |  # Read KERNELRELEASE from include/config/kernel.release (if it exists) | ||||||
|  KERNELRELEASE = $(shell cat include/config/kernel.release 2> /dev/null) |  KERNELRELEASE = $(shell cat include/config/kernel.release 2> /dev/null) | ||||||
|  KERNELVERSION = $(VERSION)$(if $(PATCHLEVEL),.$(PATCHLEVEL)$(if $(SUBLEVEL),.$(SUBLEVEL)))$(EXTRAVERSION) |  KERNELVERSION = $(VERSION)$(if $(PATCHLEVEL),.$(PATCHLEVEL)$(if $(SUBLEVEL),.$(SUBLEVEL)))$(EXTRAVERSION) | ||||||
| @@ -785,11 +790,6 @@ ifdef CONFIG_DEBUG_SECTION_MISMATCH | @@ -788,11 +793,6 @@ ifdef CONFIG_DEBUG_SECTION_MISMATCH | ||||||
|  KBUILD_CFLAGS += $(call cc-option, -fno-inline-functions-called-once) |  KBUILD_CFLAGS += $(call cc-option, -fno-inline-functions-called-once) | ||||||
|  endif |  endif | ||||||
|   |   | ||||||
|   | |||||||
| @@ -1,6 +1,6 @@ | |||||||
| --- a/include/net/netfilter/nf_flow_table.h | --- a/include/net/netfilter/nf_flow_table.h | ||||||
| +++ b/include/net/netfilter/nf_flow_table.h | +++ b/include/net/netfilter/nf_flow_table.h | ||||||
| @@ -164,6 +164,8 @@ struct nf_flow_table_hw { | @@ -163,6 +163,8 @@ struct nf_flow_table_hw { | ||||||
|  int nf_flow_table_hw_register(const struct nf_flow_table_hw *offload); |  int nf_flow_table_hw_register(const struct nf_flow_table_hw *offload); | ||||||
|  void nf_flow_table_hw_unregister(const struct nf_flow_table_hw *offload); |  void nf_flow_table_hw_unregister(const struct nf_flow_table_hw *offload); | ||||||
|   |   | ||||||
| @@ -19,7 +19,7 @@ | |||||||
|   |   | ||||||
|  struct flow_offload_entry { |  struct flow_offload_entry { | ||||||
|  	struct flow_offload	flow; |  	struct flow_offload	flow; | ||||||
| @@ -148,6 +149,22 @@ void flow_offload_free(struct flow_offlo | @@ -149,6 +150,22 @@ void flow_offload_free(struct flow_offlo | ||||||
|  } |  } | ||||||
|  EXPORT_SYMBOL_GPL(flow_offload_free); |  EXPORT_SYMBOL_GPL(flow_offload_free); | ||||||
|   |   | ||||||
|   | |||||||
| @@ -98,7 +98,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name> | |||||||
|  obj-$(CONFIG_NETFILTER_XT_TARGET_LED) += xt_LED.o |  obj-$(CONFIG_NETFILTER_XT_TARGET_LED) += xt_LED.o | ||||||
| --- /dev/null | --- /dev/null | ||||||
| +++ b/net/netfilter/xt_FLOWOFFLOAD.c | +++ b/net/netfilter/xt_FLOWOFFLOAD.c | ||||||
| @@ -0,0 +1,368 @@ | @@ -0,0 +1,366 @@ | ||||||
| +/* | +/* | ||||||
| + * Copyright (C) 2018 Felix Fietkau <nbd@nbd.name> | + * Copyright (C) 2018 Felix Fietkau <nbd@nbd.name> | ||||||
| + * | + * | ||||||
| @@ -330,9 +330,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name> | |||||||
| +		return -EINVAL; | +		return -EINVAL; | ||||||
| + | + | ||||||
| +	route->tuple[dir].dst		= this_dst; | +	route->tuple[dir].dst		= this_dst; | ||||||
| +	route->tuple[dir].ifindex	= xt_in(par)->ifindex; |  | ||||||
| +	route->tuple[!dir].dst		= other_dst; | +	route->tuple[!dir].dst		= other_dst; | ||||||
| +	route->tuple[!dir].ifindex	= xt_out(par)->ifindex; |  | ||||||
| + | + | ||||||
| +	return 0; | +	return 0; | ||||||
| +} | +} | ||||||
|   | |||||||
| @@ -14,7 +14,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name> | |||||||
|  |  | ||||||
| --- a/include/net/sch_generic.h | --- a/include/net/sch_generic.h | ||||||
| +++ b/include/net/sch_generic.h | +++ b/include/net/sch_generic.h | ||||||
| @@ -486,12 +486,13 @@ extern struct Qdisc_ops noop_qdisc_ops; | @@ -481,12 +481,13 @@ extern struct Qdisc_ops noop_qdisc_ops; | ||||||
|  extern struct Qdisc_ops pfifo_fast_ops; |  extern struct Qdisc_ops pfifo_fast_ops; | ||||||
|  extern struct Qdisc_ops mq_qdisc_ops; |  extern struct Qdisc_ops mq_qdisc_ops; | ||||||
|  extern struct Qdisc_ops noqueue_qdisc_ops; |  extern struct Qdisc_ops noqueue_qdisc_ops; | ||||||
| @@ -83,7 +83,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name> | |||||||
|  EXPORT_SYMBOL(default_qdisc_ops); |  EXPORT_SYMBOL(default_qdisc_ops); | ||||||
|   |   | ||||||
|  /* Main transmission queue. */ |  /* Main transmission queue. */ | ||||||
| @@ -1005,7 +1005,7 @@ static void attach_one_default_qdisc(str | @@ -1004,7 +1004,7 @@ static void attach_one_default_qdisc(str | ||||||
|  				     void *_unused) |  				     void *_unused) | ||||||
|  { |  { | ||||||
|  	struct Qdisc *qdisc; |  	struct Qdisc *qdisc; | ||||||
|   | |||||||
| @@ -10,7 +10,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name> | |||||||
|  |  | ||||||
| --- a/net/sched/sch_generic.c | --- a/net/sched/sch_generic.c | ||||||
| +++ b/net/sched/sch_generic.c | +++ b/net/sched/sch_generic.c | ||||||
| @@ -595,208 +595,6 @@ struct Qdisc_ops noqueue_qdisc_ops __rea | @@ -595,207 +595,6 @@ struct Qdisc_ops noqueue_qdisc_ops __rea | ||||||
|  	.owner		=	THIS_MODULE, |  	.owner		=	THIS_MODULE, | ||||||
|  }; |  }; | ||||||
|   |   | ||||||
| @@ -52,7 +52,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name> | |||||||
| -	if (unlikely(err)) | -	if (unlikely(err)) | ||||||
| -		return qdisc_drop_cpu(skb, qdisc, to_free); | -		return qdisc_drop_cpu(skb, qdisc, to_free); | ||||||
| - | - | ||||||
| -	qdisc_qstats_cpu_qlen_inc(qdisc); | -	qdisc_qstats_atomic_qlen_inc(qdisc); | ||||||
| -	/* Note: skb can not be used after skb_array_produce(), | -	/* Note: skb can not be used after skb_array_produce(), | ||||||
| -	 * so we better not use qdisc_qstats_cpu_backlog_inc() | -	 * so we better not use qdisc_qstats_cpu_backlog_inc() | ||||||
| -	 */ | -	 */ | ||||||
| @@ -77,7 +77,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name> | |||||||
| -	if (likely(skb)) { | -	if (likely(skb)) { | ||||||
| -		qdisc_qstats_cpu_backlog_dec(qdisc, skb); | -		qdisc_qstats_cpu_backlog_dec(qdisc, skb); | ||||||
| -		qdisc_bstats_cpu_update(qdisc, skb); | -		qdisc_bstats_cpu_update(qdisc, skb); | ||||||
| -		qdisc_qstats_cpu_qlen_dec(qdisc); | -		qdisc_qstats_atomic_qlen_dec(qdisc); | ||||||
| -	} | -	} | ||||||
| - | - | ||||||
| -	return skb; | -	return skb; | ||||||
| @@ -121,7 +121,6 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name> | |||||||
| -		struct gnet_stats_queue *q = per_cpu_ptr(qdisc->cpu_qstats, i); | -		struct gnet_stats_queue *q = per_cpu_ptr(qdisc->cpu_qstats, i); | ||||||
| - | - | ||||||
| -		q->backlog = 0; | -		q->backlog = 0; | ||||||
| -		q->qlen = 0; |  | ||||||
| -	} | -	} | ||||||
| -} | -} | ||||||
| - | - | ||||||
|   | |||||||
| @@ -22,6 +22,6 @@ | |||||||
| +	if (phydev->drv && phydev->drv->update_link) | +	if (phydev->drv && phydev->drv->update_link) | ||||||
| +		return phydev->drv->update_link(phydev); | +		return phydev->drv->update_link(phydev); | ||||||
| + | + | ||||||
|  	/* Do a fake read */ |  	/* The link state is latched low so that momentary link | ||||||
|  	status = phy_read(phydev, MII_BMSR); |  	 * drops can be detected. Do not double-read the status | ||||||
|  	if (status < 0) |  	 * in polling mode to detect such short link drops. | ||||||
|   | |||||||
| @@ -232,7 +232,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name> | |||||||
|  	if (!pe) |  	if (!pe) | ||||||
| --- a/mm/vmalloc.c | --- a/mm/vmalloc.c | ||||||
| +++ b/mm/vmalloc.c | +++ b/mm/vmalloc.c | ||||||
| @@ -2736,6 +2736,8 @@ static const struct seq_operations vmall | @@ -2740,6 +2740,8 @@ static const struct seq_operations vmall | ||||||
|   |   | ||||||
|  static int __init proc_vmalloc_init(void) |  static int __init proc_vmalloc_init(void) | ||||||
|  { |  { | ||||||
|   | |||||||
| @@ -54,7 +54,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name> | |||||||
| +MODULE_LICENSE("GPL"); | +MODULE_LICENSE("GPL"); | ||||||
| --- a/kernel/sched/core.c | --- a/kernel/sched/core.c | ||||||
| +++ b/kernel/sched/core.c | +++ b/kernel/sched/core.c | ||||||
| @@ -2127,6 +2127,7 @@ int wake_up_state(struct task_struct *p, | @@ -2129,6 +2129,7 @@ int wake_up_state(struct task_struct *p, | ||||||
|  { |  { | ||||||
|  	return try_to_wake_up(p, state, 0); |  	return try_to_wake_up(p, state, 0); | ||||||
|  } |  } | ||||||
|   | |||||||
| @@ -39,7 +39,7 @@ Signed-off-by: Chen Minqiang <ptpt52@gmail.com> | |||||||
|  |  | ||||||
| --- a/net/netfilter/xt_FLOWOFFLOAD.c | --- a/net/netfilter/xt_FLOWOFFLOAD.c | ||||||
| +++ b/net/netfilter/xt_FLOWOFFLOAD.c | +++ b/net/netfilter/xt_FLOWOFFLOAD.c | ||||||
| @@ -340,10 +340,41 @@ static void xt_flowoffload_table_cleanup | @@ -338,10 +338,41 @@ static void xt_flowoffload_table_cleanup | ||||||
|  	nf_flow_table_free(table); |  	nf_flow_table_free(table); | ||||||
|  } |  } | ||||||
|   |   | ||||||
| @@ -81,7 +81,7 @@ Signed-off-by: Chen Minqiang <ptpt52@gmail.com> | |||||||
|  	INIT_DELAYED_WORK(&hook_work, xt_flowoffload_hook_work); |  	INIT_DELAYED_WORK(&hook_work, xt_flowoffload_hook_work); | ||||||
|   |   | ||||||
|  	ret = xt_flowoffload_table_init(&nf_flowtable); |  	ret = xt_flowoffload_table_init(&nf_flowtable); | ||||||
| @@ -361,6 +392,7 @@ static void __exit xt_flowoffload_tg_exi | @@ -359,6 +390,7 @@ static void __exit xt_flowoffload_tg_exi | ||||||
|  { |  { | ||||||
|  	xt_unregister_target(&offload_tg_reg); |  	xt_unregister_target(&offload_tg_reg); | ||||||
|  	xt_flowoffload_table_cleanup(&nf_flowtable); |  	xt_flowoffload_table_cleanup(&nf_flowtable); | ||||||
|   | |||||||
| @@ -14,7 +14,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name> | |||||||
|  |  | ||||||
| --- a/Makefile | --- a/Makefile | ||||||
| +++ b/Makefile | +++ b/Makefile | ||||||
| @@ -659,12 +659,12 @@ KBUILD_CFLAGS	+= $(call cc-disable-warni | @@ -662,12 +662,12 @@ KBUILD_CFLAGS	+= $(call cc-disable-warni | ||||||
|   |   | ||||||
|  ifdef CONFIG_CC_OPTIMIZE_FOR_SIZE |  ifdef CONFIG_CC_OPTIMIZE_FOR_SIZE | ||||||
|  KBUILD_CFLAGS	+= $(call cc-option,-Oz,-Os) |  KBUILD_CFLAGS	+= $(call cc-option,-Oz,-Os) | ||||||
|   | |||||||
| @@ -11,7 +11,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name> | |||||||
|  |  | ||||||
| --- a/arch/mips/Makefile | --- a/arch/mips/Makefile | ||||||
| +++ b/arch/mips/Makefile | +++ b/arch/mips/Makefile | ||||||
| @@ -171,7 +171,7 @@ cflags-$(CONFIG_CPU_VR41XX)	+= -march=r4 | @@ -176,7 +176,7 @@ cflags-$(CONFIG_CPU_VR41XX)	+= -march=r4 | ||||||
|  cflags-$(CONFIG_CPU_R4X00)	+= -march=r4600 -Wa,--trap |  cflags-$(CONFIG_CPU_R4X00)	+= -march=r4600 -Wa,--trap | ||||||
|  cflags-$(CONFIG_CPU_TX49XX)	+= -march=r4600 -Wa,--trap |  cflags-$(CONFIG_CPU_TX49XX)	+= -march=r4600 -Wa,--trap | ||||||
|  cflags-$(CONFIG_CPU_MIPS32_R1)	+= -march=mips32 -Wa,--trap |  cflags-$(CONFIG_CPU_MIPS32_R1)	+= -march=mips32 -Wa,--trap | ||||||
|   | |||||||
| @@ -23,8 +23,8 @@ Signed-off-by: Evgeniy Didin <Evgeniy.Didin@synopsys.com> | |||||||
|  |  | ||||||
| --- a/arch/arc/kernel/head.S | --- a/arch/arc/kernel/head.S | ||||||
| +++ b/arch/arc/kernel/head.S | +++ b/arch/arc/kernel/head.S | ||||||
| @@ -49,6 +49,16 @@ | @@ -59,6 +59,16 @@ | ||||||
|  1: |  #endif | ||||||
|  .endm |  .endm | ||||||
|   |   | ||||||
| +	; Here "patch-dtb" will embed external .dtb | +	; Here "patch-dtb" will embed external .dtb | ||||||
| @@ -42,24 +42,24 @@ Signed-off-by: Evgeniy Didin <Evgeniy.Didin@synopsys.com> | |||||||
|  ;---------------------------------------------------------------- |  ;---------------------------------------------------------------- | ||||||
| --- a/arch/arc/kernel/setup.c | --- a/arch/arc/kernel/setup.c | ||||||
| +++ b/arch/arc/kernel/setup.c | +++ b/arch/arc/kernel/setup.c | ||||||
| @@ -456,6 +456,8 @@ static inline int is_kernel(unsigned lon | @@ -520,7 +520,7 @@ ignore_uboot_args: | ||||||
|  	return 0; |  #endif | ||||||
|  |   | ||||||
|  |  	if (use_embedded_dtb) { | ||||||
|  | -		machine_desc = setup_machine_fdt(__dtb_start); | ||||||
|  | +		machine_desc = setup_machine_fdt(&__image_dtb); | ||||||
|  |  		if (!machine_desc) | ||||||
|  |  			panic("Embedded DT invalid\n"); | ||||||
|  |  	} | ||||||
|  | @@ -536,6 +536,8 @@ ignore_uboot_args: | ||||||
|  |  	} | ||||||
|  } |  } | ||||||
|   |   | ||||||
| +extern struct boot_param_header __image_dtb; | +extern struct boot_param_header __image_dtb; | ||||||
| + | + | ||||||
|  void __init setup_arch(char **cmdline_p) |  void __init setup_arch(char **cmdline_p) | ||||||
|  { |  { | ||||||
|  #ifdef CONFIG_ARC_UBOOT_SUPPORT |  	handle_uboot_args(); | ||||||
| @@ -469,7 +471,7 @@ void __init setup_arch(char **cmdline_p) |  | ||||||
|  #endif |  | ||||||
|  	{ |  | ||||||
|  		/* No, so try the embedded one */ |  | ||||||
| -		machine_desc = setup_machine_fdt(__dtb_start); |  | ||||||
| +		machine_desc = setup_machine_fdt(&__image_dtb); |  | ||||||
|  		if (!machine_desc) |  | ||||||
|  			panic("Embedded DT invalid\n"); |  | ||||||
|   |  | ||||||
| --- a/arch/arc/kernel/vmlinux.lds.S | --- a/arch/arc/kernel/vmlinux.lds.S | ||||||
| +++ b/arch/arc/kernel/vmlinux.lds.S | +++ b/arch/arc/kernel/vmlinux.lds.S | ||||||
| @@ -30,6 +30,19 @@ SECTIONS | @@ -30,6 +30,19 @@ SECTIONS | ||||||
|   | |||||||
| @@ -28,7 +28,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name> | |||||||
|  	/* |  	/* | ||||||
|  	 * Get the required data from the packet. |  	 * Get the required data from the packet. | ||||||
|  	 */ |  	 */ | ||||||
| @@ -1476,6 +1482,13 @@ static struct ctl_table tcp_sysctl_table | @@ -1506,6 +1512,13 @@ static struct ctl_table tcp_sysctl_table | ||||||
|  		.mode		= 0644, |  		.mode		= 0644, | ||||||
|  		.proc_handler	= proc_dointvec, |  		.proc_handler	= proc_dointvec, | ||||||
|  	}, |  	}, | ||||||
|   | |||||||
| @@ -85,7 +85,7 @@ Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org> | |||||||
|   |   | ||||||
|  struct flow_offload { |  struct flow_offload { | ||||||
|  	struct flow_offload_tuple_rhash		tuplehash[FLOW_OFFLOAD_DIR_MAX]; |  	struct flow_offload_tuple_rhash		tuplehash[FLOW_OFFLOAD_DIR_MAX]; | ||||||
| @@ -126,6 +133,22 @@ unsigned int nf_flow_offload_ip_hook(voi | @@ -125,6 +132,22 @@ unsigned int nf_flow_offload_ip_hook(voi | ||||||
|  unsigned int nf_flow_offload_ipv6_hook(void *priv, struct sk_buff *skb, |  unsigned int nf_flow_offload_ipv6_hook(void *priv, struct sk_buff *skb, | ||||||
|  				       const struct nf_hook_state *state); |  				       const struct nf_hook_state *state); | ||||||
|   |   | ||||||
| @@ -156,7 +156,7 @@ Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org> | |||||||
|  obj-$(CONFIG_NETFILTER_XTABLES) += x_tables.o xt_tcpudp.o |  obj-$(CONFIG_NETFILTER_XTABLES) += x_tables.o xt_tcpudp.o | ||||||
| --- a/net/netfilter/nf_flow_table_core.c | --- a/net/netfilter/nf_flow_table_core.c | ||||||
| +++ b/net/netfilter/nf_flow_table_core.c | +++ b/net/netfilter/nf_flow_table_core.c | ||||||
| @@ -215,10 +215,16 @@ int flow_offload_add(struct nf_flowtable | @@ -216,10 +216,16 @@ int flow_offload_add(struct nf_flowtable | ||||||
|  } |  } | ||||||
|  EXPORT_SYMBOL_GPL(flow_offload_add); |  EXPORT_SYMBOL_GPL(flow_offload_add); | ||||||
|   |   | ||||||
| @@ -173,7 +173,7 @@ Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org> | |||||||
|   |   | ||||||
|  	rhashtable_remove_fast(&flow_table->rhashtable, |  	rhashtable_remove_fast(&flow_table->rhashtable, | ||||||
|  			       &flow->tuplehash[FLOW_OFFLOAD_DIR_ORIGINAL].node, |  			       &flow->tuplehash[FLOW_OFFLOAD_DIR_ORIGINAL].node, | ||||||
| @@ -233,6 +239,9 @@ static void flow_offload_del(struct nf_f | @@ -234,6 +240,9 @@ static void flow_offload_del(struct nf_f | ||||||
|  	if (!(flow->flags & FLOW_OFFLOAD_TEARDOWN)) |  	if (!(flow->flags & FLOW_OFFLOAD_TEARDOWN)) | ||||||
|  		flow_offload_fixup_ct_state(e->ct); |  		flow_offload_fixup_ct_state(e->ct); | ||||||
|   |   | ||||||
| @@ -183,7 +183,7 @@ Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org> | |||||||
|  	flow_offload_free(flow); |  	flow_offload_free(flow); | ||||||
|  } |  } | ||||||
|   |   | ||||||
| @@ -346,6 +355,9 @@ static int nf_flow_offload_gc_step(struc | @@ -347,6 +356,9 @@ static int nf_flow_offload_gc_step(struc | ||||||
|  		if (!teardown) |  		if (!teardown) | ||||||
|  			nf_ct_offload_timeout(flow); |  			nf_ct_offload_timeout(flow); | ||||||
|   |   | ||||||
| @@ -193,7 +193,7 @@ Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org> | |||||||
|  		if (nf_flow_has_expired(flow) || teardown) |  		if (nf_flow_has_expired(flow) || teardown) | ||||||
|  			flow_offload_del(flow_table, flow); |  			flow_offload_del(flow_table, flow); | ||||||
|  	} |  	} | ||||||
| @@ -481,10 +493,43 @@ int nf_flow_dnat_port(const struct flow_ | @@ -482,10 +494,43 @@ int nf_flow_dnat_port(const struct flow_ | ||||||
|  } |  } | ||||||
|  EXPORT_SYMBOL_GPL(nf_flow_dnat_port); |  EXPORT_SYMBOL_GPL(nf_flow_dnat_port); | ||||||
|   |   | ||||||
| @@ -237,7 +237,7 @@ Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org> | |||||||
|  	INIT_DEFERRABLE_WORK(&flowtable->gc_work, nf_flow_offload_work_gc); |  	INIT_DEFERRABLE_WORK(&flowtable->gc_work, nf_flow_offload_work_gc); | ||||||
|   |   | ||||||
|  	err = rhashtable_init(&flowtable->rhashtable, |  	err = rhashtable_init(&flowtable->rhashtable, | ||||||
| @@ -522,6 +567,8 @@ static void nf_flow_table_iterate_cleanu | @@ -523,6 +568,8 @@ static void nf_flow_table_iterate_cleanu | ||||||
|  { |  { | ||||||
|  	nf_flow_table_iterate(flowtable, nf_flow_table_do_cleanup, dev); |  	nf_flow_table_iterate(flowtable, nf_flow_table_do_cleanup, dev); | ||||||
|  	flush_delayed_work(&flowtable->gc_work); |  	flush_delayed_work(&flowtable->gc_work); | ||||||
| @@ -246,7 +246,7 @@ Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org> | |||||||
|  } |  } | ||||||
|   |   | ||||||
|  void nf_flow_table_cleanup(struct net *net, struct net_device *dev) |  void nf_flow_table_cleanup(struct net *net, struct net_device *dev) | ||||||
| @@ -535,6 +582,26 @@ void nf_flow_table_cleanup(struct net *n | @@ -536,6 +583,26 @@ void nf_flow_table_cleanup(struct net *n | ||||||
|  } |  } | ||||||
|  EXPORT_SYMBOL_GPL(nf_flow_table_cleanup); |  EXPORT_SYMBOL_GPL(nf_flow_table_cleanup); | ||||||
|   |   | ||||||
| @@ -273,7 +273,7 @@ Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org> | |||||||
|  void nf_flow_table_free(struct nf_flowtable *flow_table) |  void nf_flow_table_free(struct nf_flowtable *flow_table) | ||||||
|  { |  { | ||||||
|  	mutex_lock(&flowtable_lock); |  	mutex_lock(&flowtable_lock); | ||||||
| @@ -544,9 +611,58 @@ void nf_flow_table_free(struct nf_flowta | @@ -545,9 +612,58 @@ void nf_flow_table_free(struct nf_flowta | ||||||
|  	nf_flow_table_iterate(flow_table, nf_flow_table_do_cleanup, NULL); |  	nf_flow_table_iterate(flow_table, nf_flow_table_do_cleanup, NULL); | ||||||
|  	WARN_ON(!nf_flow_offload_gc_step(flow_table)); |  	WARN_ON(!nf_flow_offload_gc_step(flow_table)); | ||||||
|  	rhashtable_destroy(&flow_table->rhashtable); |  	rhashtable_destroy(&flow_table->rhashtable); | ||||||
| @@ -506,7 +506,7 @@ Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org> | |||||||
| +MODULE_ALIAS("nf-flow-table-hw"); | +MODULE_ALIAS("nf-flow-table-hw"); | ||||||
| --- a/net/netfilter/nf_tables_api.c | --- a/net/netfilter/nf_tables_api.c | ||||||
| +++ b/net/netfilter/nf_tables_api.c | +++ b/net/netfilter/nf_tables_api.c | ||||||
| @@ -5394,6 +5394,13 @@ static int nf_tables_flowtable_parse_hoo | @@ -5399,6 +5399,13 @@ static int nf_tables_flowtable_parse_hoo | ||||||
|  	if (err < 0) |  	if (err < 0) | ||||||
|  		return err; |  		return err; | ||||||
|   |   | ||||||
| @@ -520,7 +520,7 @@ Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org> | |||||||
|  	ops = kcalloc(n, sizeof(struct nf_hook_ops), GFP_KERNEL); |  	ops = kcalloc(n, sizeof(struct nf_hook_ops), GFP_KERNEL); | ||||||
|  	if (!ops) |  	if (!ops) | ||||||
|  		return -ENOMEM; |  		return -ENOMEM; | ||||||
| @@ -5525,10 +5532,19 @@ static int nf_tables_newflowtable(struct | @@ -5530,10 +5537,19 @@ static int nf_tables_newflowtable(struct | ||||||
|  	} |  	} | ||||||
|   |   | ||||||
|  	flowtable->data.type = type; |  	flowtable->data.type = type; | ||||||
| @@ -540,7 +540,7 @@ Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org> | |||||||
|  	err = nf_tables_flowtable_parse_hook(&ctx, nla[NFTA_FLOWTABLE_HOOK], |  	err = nf_tables_flowtable_parse_hook(&ctx, nla[NFTA_FLOWTABLE_HOOK], | ||||||
|  					     flowtable); |  					     flowtable); | ||||||
|  	if (err < 0) |  	if (err < 0) | ||||||
| @@ -5654,7 +5670,8 @@ static int nf_tables_fill_flowtable_info | @@ -5659,7 +5675,8 @@ static int nf_tables_fill_flowtable_info | ||||||
|  	    nla_put_string(skb, NFTA_FLOWTABLE_NAME, flowtable->name) || |  	    nla_put_string(skb, NFTA_FLOWTABLE_NAME, flowtable->name) || | ||||||
|  	    nla_put_be32(skb, NFTA_FLOWTABLE_USE, htonl(flowtable->use)) || |  	    nla_put_be32(skb, NFTA_FLOWTABLE_USE, htonl(flowtable->use)) || | ||||||
|  	    nla_put_be64(skb, NFTA_FLOWTABLE_HANDLE, cpu_to_be64(flowtable->handle), |  	    nla_put_be64(skb, NFTA_FLOWTABLE_HANDLE, cpu_to_be64(flowtable->handle), | ||||||
| @@ -552,7 +552,7 @@ Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org> | |||||||
|  	nest = nla_nest_start(skb, NFTA_FLOWTABLE_HOOK); |  	nest = nla_nest_start(skb, NFTA_FLOWTABLE_HOOK); | ||||||
| --- a/net/netfilter/nft_flow_offload.c | --- a/net/netfilter/nft_flow_offload.c | ||||||
| +++ b/net/netfilter/nft_flow_offload.c | +++ b/net/netfilter/nft_flow_offload.c | ||||||
| @@ -121,6 +121,9 @@ static void nft_flow_offload_eval(const | @@ -124,6 +124,9 @@ static void nft_flow_offload_eval(const | ||||||
|  	if (ret < 0) |  	if (ret < 0) | ||||||
|  		goto err_flow_add; |  		goto err_flow_add; | ||||||
|   |   | ||||||
|   | |||||||
| @@ -26,7 +26,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name> | |||||||
|  	struct flow_offload_tuple_rhash		tuplehash[FLOW_OFFLOAD_DIR_MAX]; |  	struct flow_offload_tuple_rhash		tuplehash[FLOW_OFFLOAD_DIR_MAX]; | ||||||
| --- a/net/netfilter/nf_flow_table_core.c | --- a/net/netfilter/nf_flow_table_core.c | ||||||
| +++ b/net/netfilter/nf_flow_table_core.c | +++ b/net/netfilter/nf_flow_table_core.c | ||||||
| @@ -355,7 +355,7 @@ static int nf_flow_offload_gc_step(struc | @@ -356,7 +356,7 @@ static int nf_flow_offload_gc_step(struc | ||||||
|  		if (!teardown) |  		if (!teardown) | ||||||
|  			nf_ct_offload_timeout(flow); |  			nf_ct_offload_timeout(flow); | ||||||
|   |   | ||||||
|   | |||||||
| @@ -157,7 +157,7 @@ Signed-off-by: Jonas Gorski <jogo@openwrt.org> | |||||||
|  	case RTN_THROW: |  	case RTN_THROW: | ||||||
|  	case RTN_UNREACHABLE: |  	case RTN_UNREACHABLE: | ||||||
|  	default: |  	default: | ||||||
| @@ -3747,6 +3766,17 @@ static int ip6_pkt_prohibit_out(struct n | @@ -3765,6 +3784,17 @@ static int ip6_pkt_prohibit_out(struct n | ||||||
|  	return ip6_pkt_drop(skb, ICMPV6_ADM_PROHIBITED, IPSTATS_MIB_OUTNOROUTES); |  	return ip6_pkt_drop(skb, ICMPV6_ADM_PROHIBITED, IPSTATS_MIB_OUTNOROUTES); | ||||||
|  } |  } | ||||||
|   |   | ||||||
| @@ -175,7 +175,7 @@ Signed-off-by: Jonas Gorski <jogo@openwrt.org> | |||||||
|  /* |  /* | ||||||
|   *	Allocate a dst for local (unicast / anycast) address. |   *	Allocate a dst for local (unicast / anycast) address. | ||||||
|   */ |   */ | ||||||
| @@ -4194,7 +4224,8 @@ static int rtm_to_fib6_config(struct sk_ | @@ -4212,7 +4242,8 @@ static int rtm_to_fib6_config(struct sk_ | ||||||
|  	if (rtm->rtm_type == RTN_UNREACHABLE || |  	if (rtm->rtm_type == RTN_UNREACHABLE || | ||||||
|  	    rtm->rtm_type == RTN_BLACKHOLE || |  	    rtm->rtm_type == RTN_BLACKHOLE || | ||||||
|  	    rtm->rtm_type == RTN_PROHIBIT || |  	    rtm->rtm_type == RTN_PROHIBIT || | ||||||
| @@ -185,7 +185,7 @@ Signed-off-by: Jonas Gorski <jogo@openwrt.org> | |||||||
|  		cfg->fc_flags |= RTF_REJECT; |  		cfg->fc_flags |= RTF_REJECT; | ||||||
|   |   | ||||||
|  	if (rtm->rtm_type == RTN_LOCAL) |  	if (rtm->rtm_type == RTN_LOCAL) | ||||||
| @@ -5033,6 +5064,8 @@ static int ip6_route_dev_notify(struct n | @@ -5056,6 +5087,8 @@ static int ip6_route_dev_notify(struct n | ||||||
|  #ifdef CONFIG_IPV6_MULTIPLE_TABLES |  #ifdef CONFIG_IPV6_MULTIPLE_TABLES | ||||||
|  		net->ipv6.ip6_prohibit_entry->dst.dev = dev; |  		net->ipv6.ip6_prohibit_entry->dst.dev = dev; | ||||||
|  		net->ipv6.ip6_prohibit_entry->rt6i_idev = in6_dev_get(dev); |  		net->ipv6.ip6_prohibit_entry->rt6i_idev = in6_dev_get(dev); | ||||||
| @@ -194,7 +194,7 @@ Signed-off-by: Jonas Gorski <jogo@openwrt.org> | |||||||
|  		net->ipv6.ip6_blk_hole_entry->dst.dev = dev; |  		net->ipv6.ip6_blk_hole_entry->dst.dev = dev; | ||||||
|  		net->ipv6.ip6_blk_hole_entry->rt6i_idev = in6_dev_get(dev); |  		net->ipv6.ip6_blk_hole_entry->rt6i_idev = in6_dev_get(dev); | ||||||
|  #endif |  #endif | ||||||
| @@ -5044,6 +5077,7 @@ static int ip6_route_dev_notify(struct n | @@ -5067,6 +5100,7 @@ static int ip6_route_dev_notify(struct n | ||||||
|  		in6_dev_put_clear(&net->ipv6.ip6_null_entry->rt6i_idev); |  		in6_dev_put_clear(&net->ipv6.ip6_null_entry->rt6i_idev); | ||||||
|  #ifdef CONFIG_IPV6_MULTIPLE_TABLES |  #ifdef CONFIG_IPV6_MULTIPLE_TABLES | ||||||
|  		in6_dev_put_clear(&net->ipv6.ip6_prohibit_entry->rt6i_idev); |  		in6_dev_put_clear(&net->ipv6.ip6_prohibit_entry->rt6i_idev); | ||||||
| @@ -202,7 +202,7 @@ Signed-off-by: Jonas Gorski <jogo@openwrt.org> | |||||||
|  		in6_dev_put_clear(&net->ipv6.ip6_blk_hole_entry->rt6i_idev); |  		in6_dev_put_clear(&net->ipv6.ip6_blk_hole_entry->rt6i_idev); | ||||||
|  #endif |  #endif | ||||||
|  	} |  	} | ||||||
| @@ -5238,6 +5272,15 @@ static int __net_init ip6_route_net_init | @@ -5261,6 +5295,15 @@ static int __net_init ip6_route_net_init | ||||||
|  	net->ipv6.ip6_blk_hole_entry->dst.ops = &net->ipv6.ip6_dst_ops; |  	net->ipv6.ip6_blk_hole_entry->dst.ops = &net->ipv6.ip6_dst_ops; | ||||||
|  	dst_init_metrics(&net->ipv6.ip6_blk_hole_entry->dst, |  	dst_init_metrics(&net->ipv6.ip6_blk_hole_entry->dst, | ||||||
|  			 ip6_template_metrics, true); |  			 ip6_template_metrics, true); | ||||||
| @@ -218,7 +218,7 @@ Signed-off-by: Jonas Gorski <jogo@openwrt.org> | |||||||
|  #endif |  #endif | ||||||
|   |   | ||||||
|  	net->ipv6.sysctl.flush_delay = 0; |  	net->ipv6.sysctl.flush_delay = 0; | ||||||
| @@ -5256,6 +5299,8 @@ out: | @@ -5279,6 +5322,8 @@ out: | ||||||
|  	return ret; |  	return ret; | ||||||
|   |   | ||||||
|  #ifdef CONFIG_IPV6_MULTIPLE_TABLES |  #ifdef CONFIG_IPV6_MULTIPLE_TABLES | ||||||
| @@ -227,7 +227,7 @@ Signed-off-by: Jonas Gorski <jogo@openwrt.org> | |||||||
|  out_ip6_prohibit_entry: |  out_ip6_prohibit_entry: | ||||||
|  	kfree(net->ipv6.ip6_prohibit_entry); |  	kfree(net->ipv6.ip6_prohibit_entry); | ||||||
|  out_ip6_null_entry: |  out_ip6_null_entry: | ||||||
| @@ -5276,6 +5321,7 @@ static void __net_exit ip6_route_net_exi | @@ -5299,6 +5344,7 @@ static void __net_exit ip6_route_net_exi | ||||||
|  #ifdef CONFIG_IPV6_MULTIPLE_TABLES |  #ifdef CONFIG_IPV6_MULTIPLE_TABLES | ||||||
|  	kfree(net->ipv6.ip6_prohibit_entry); |  	kfree(net->ipv6.ip6_prohibit_entry); | ||||||
|  	kfree(net->ipv6.ip6_blk_hole_entry); |  	kfree(net->ipv6.ip6_blk_hole_entry); | ||||||
| @@ -235,7 +235,7 @@ Signed-off-by: Jonas Gorski <jogo@openwrt.org> | |||||||
|  #endif |  #endif | ||||||
|  	dst_entries_destroy(&net->ipv6.ip6_dst_ops); |  	dst_entries_destroy(&net->ipv6.ip6_dst_ops); | ||||||
|  } |  } | ||||||
| @@ -5352,6 +5398,9 @@ void __init ip6_route_init_special_entri | @@ -5375,6 +5421,9 @@ void __init ip6_route_init_special_entri | ||||||
|  	init_net.ipv6.ip6_prohibit_entry->rt6i_idev = in6_dev_get(init_net.loopback_dev); |  	init_net.ipv6.ip6_prohibit_entry->rt6i_idev = in6_dev_get(init_net.loopback_dev); | ||||||
|  	init_net.ipv6.ip6_blk_hole_entry->dst.dev = init_net.loopback_dev; |  	init_net.ipv6.ip6_blk_hole_entry->dst.dev = init_net.loopback_dev; | ||||||
|  	init_net.ipv6.ip6_blk_hole_entry->rt6i_idev = in6_dev_get(init_net.loopback_dev); |  	init_net.ipv6.ip6_blk_hole_entry->rt6i_idev = in6_dev_get(init_net.loopback_dev); | ||||||
|   | |||||||
| @@ -28,8 +28,6 @@ Cc: stable@vger.kernel.org # v4.17+ | |||||||
|  drivers/media/i2c/Kconfig | 3 ++- |  drivers/media/i2c/Kconfig | 3 ++- | ||||||
|  1 file changed, 2 insertions(+), 1 deletion(-) |  1 file changed, 2 insertions(+), 1 deletion(-) | ||||||
|  |  | ||||||
| diff --git a/drivers/media/i2c/Kconfig b/drivers/media/i2c/Kconfig |  | ||||||
| index 4c936e129500..8b296ae7d68c 100644 |  | ||||||
| --- a/drivers/media/i2c/Kconfig | --- a/drivers/media/i2c/Kconfig | ||||||
| +++ b/drivers/media/i2c/Kconfig | +++ b/drivers/media/i2c/Kconfig | ||||||
| @@ -60,8 +60,9 @@ config VIDEO_TDA1997X | @@ -60,8 +60,9 @@ config VIDEO_TDA1997X | ||||||
| @@ -43,6 +41,3 @@ index 4c936e129500..8b296ae7d68c 100644 | |||||||
|  	---help--- |  	---help--- | ||||||
|  	  V4L2 subdevice driver for the NXP TDA1997x HDMI receivers. |  	  V4L2 subdevice driver for the NXP TDA1997x HDMI receivers. | ||||||
|   |   | ||||||
| --  |  | ||||||
| 2.17.1 |  | ||||||
|  |  | ||||||
|   | |||||||
| @@ -1,6 +1,6 @@ | |||||||
| --- a/drivers/staging/octeon/ethernet.c | --- a/drivers/staging/octeon/ethernet.c | ||||||
| +++ b/drivers/staging/octeon/ethernet.c | +++ b/drivers/staging/octeon/ethernet.c | ||||||
| @@ -673,6 +673,7 @@ static int cvm_oct_probe(struct platform | @@ -670,6 +670,7 @@ static int cvm_oct_probe(struct platform | ||||||
|  	int interface; |  	int interface; | ||||||
|  	int fau = FAU_NUM_PACKET_BUFFERS_TO_FREE; |  	int fau = FAU_NUM_PACKET_BUFFERS_TO_FREE; | ||||||
|  	int qos; |  	int qos; | ||||||
| @@ -8,7 +8,7 @@ | |||||||
|  	struct device_node *pip; |  	struct device_node *pip; | ||||||
|  	int mtu_overhead = ETH_HLEN + ETH_FCS_LEN; |  	int mtu_overhead = ETH_HLEN + ETH_FCS_LEN; | ||||||
|   |   | ||||||
| @@ -796,13 +797,19 @@ static int cvm_oct_probe(struct platform | @@ -793,13 +794,19 @@ static int cvm_oct_probe(struct platform | ||||||
|  	} |  	} | ||||||
|   |   | ||||||
|  	num_interfaces = cvmx_helper_get_number_of_interfaces(); |  	num_interfaces = cvmx_helper_get_number_of_interfaces(); | ||||||
|   | |||||||
| @@ -1,6 +1,6 @@ | |||||||
| --- a/arch/mips/cavium-octeon/setup.c | --- a/arch/mips/cavium-octeon/setup.c | ||||||
| +++ b/arch/mips/cavium-octeon/setup.c | +++ b/arch/mips/cavium-octeon/setup.c | ||||||
| @@ -650,6 +650,35 @@ void octeon_user_io_init(void) | @@ -651,6 +651,35 @@ void octeon_user_io_init(void) | ||||||
|  	write_c0_derraddr1(0); |  	write_c0_derraddr1(0); | ||||||
|  } |  } | ||||||
|   |   | ||||||
| @@ -36,7 +36,7 @@ | |||||||
|  /** |  /** | ||||||
|   * Early entry point for arch setup |   * Early entry point for arch setup | ||||||
|   */ |   */ | ||||||
| @@ -894,6 +923,8 @@ void __init prom_init(void) | @@ -895,6 +924,8 @@ void __init prom_init(void) | ||||||
|  		} |  		} | ||||||
|  	} |  	} | ||||||
|   |   | ||||||
|   | |||||||
| @@ -141,39 +141,9 @@ Signed-off-by: Daniel Lezcano <daniel.lezcano@linaro.org> | |||||||
|  drivers/clocksource/arm_arch_timer.c   | 55 ++++++++++++++++++++++++++ |  drivers/clocksource/arm_arch_timer.c   | 55 ++++++++++++++++++++++++++ | ||||||
|  3 files changed, 67 insertions(+) |  3 files changed, 67 insertions(+) | ||||||
|  |  | ||||||
| --- a/Documentation/arm64/silicon-errata.txt |  | ||||||
| +++ b/Documentation/arm64/silicon-errata.txt |  | ||||||
| @@ -44,6 +44,8 @@ stable kernels. |  | ||||||
|   |  | ||||||
|  | Implementor    | Component       | Erratum ID      | Kconfig                     | |  | ||||||
|  +----------------+-----------------+-----------------+-----------------------------+ |  | ||||||
| +| Allwinner      | A64/R18         | UNKNOWN1        | SUN50I_ERRATUM_UNKNOWN1     | |  | ||||||
| +|                |                 |                 |                             | |  | ||||||
|  | ARM            | Cortex-A53      | #826319         | ARM64_ERRATUM_826319        | |  | ||||||
|  | ARM            | Cortex-A53      | #827319         | ARM64_ERRATUM_827319        | |  | ||||||
|  | ARM            | Cortex-A53      | #824069         | ARM64_ERRATUM_824069        | |  | ||||||
| --- a/drivers/clocksource/Kconfig |  | ||||||
| +++ b/drivers/clocksource/Kconfig |  | ||||||
| @@ -365,6 +365,16 @@ config ARM64_ERRATUM_858921 |  | ||||||
|  	  The workaround will be dynamically enabled when an affected |  | ||||||
|  	  core is detected. |  | ||||||
|   |  | ||||||
| +config SUN50I_ERRATUM_UNKNOWN1 |  | ||||||
| +	bool "Workaround for Allwinner A64 erratum UNKNOWN1" |  | ||||||
| +	default y |  | ||||||
| +	depends on ARM_ARCH_TIMER && ARM64 && ARCH_SUNXI |  | ||||||
| +	select ARM_ARCH_TIMER_OOL_WORKAROUND |  | ||||||
| +	help |  | ||||||
| +	  This option enables a workaround for instability in the timer on |  | ||||||
| +	  the Allwinner A64 SoC. The workaround will only be active if the |  | ||||||
| +	  allwinner,erratum-unknown1 property is found in the timer node. |  | ||||||
| + |  | ||||||
|  config ARM_GLOBAL_TIMER |  | ||||||
|  	bool "Support for the ARM global timer" if COMPILE_TEST |  | ||||||
|  	select TIMER_OF if OF |  | ||||||
| --- a/drivers/clocksource/arm_arch_timer.c | --- a/drivers/clocksource/arm_arch_timer.c | ||||||
| +++ b/drivers/clocksource/arm_arch_timer.c | +++ b/drivers/clocksource/arm_arch_timer.c | ||||||
| @@ -319,6 +319,48 @@ static u64 notrace arm64_858921_read_cnt | @@ -361,6 +361,48 @@ static u32 notrace sun50i_a64_read_cntv_ | ||||||
|  } |  } | ||||||
|  #endif |  #endif | ||||||
|   |   | ||||||
| @@ -222,11 +192,10 @@ Signed-off-by: Daniel Lezcano <daniel.lezcano@linaro.org> | |||||||
|  #ifdef CONFIG_ARM_ARCH_TIMER_OOL_WORKAROUND |  #ifdef CONFIG_ARM_ARCH_TIMER_OOL_WORKAROUND | ||||||
|  DEFINE_PER_CPU(const struct arch_timer_erratum_workaround *, timer_unstable_counter_workaround); |  DEFINE_PER_CPU(const struct arch_timer_erratum_workaround *, timer_unstable_counter_workaround); | ||||||
|  EXPORT_SYMBOL_GPL(timer_unstable_counter_workaround); |  EXPORT_SYMBOL_GPL(timer_unstable_counter_workaround); | ||||||
| @@ -408,6 +450,19 @@ static const struct arch_timer_erratum_w | @@ -451,6 +493,19 @@ static const struct arch_timer_erratum_w | ||||||
|  		.read_cntvct_el0 = arm64_858921_read_cntvct_el0, |  | ||||||
|  	}, |  	}, | ||||||
|  #endif |  #endif | ||||||
| +#ifdef CONFIG_SUN50I_ERRATUM_UNKNOWN1 |  #ifdef CONFIG_SUN50I_ERRATUM_UNKNOWN1 | ||||||
| +	{ | +	{ | ||||||
| +		.match_type = ate_match_dt, | +		.match_type = ate_match_dt, | ||||||
| +		.id = "allwinner,erratum-unknown1", | +		.id = "allwinner,erratum-unknown1", | ||||||
| @@ -239,6 +208,7 @@ Signed-off-by: Daniel Lezcano <daniel.lezcano@linaro.org> | |||||||
| +		.set_next_event_virt = erratum_set_next_event_tval_virt, | +		.set_next_event_virt = erratum_set_next_event_tval_virt, | ||||||
| +	}, | +	}, | ||||||
| +#endif | +#endif | ||||||
|  }; | +#ifdef CONFIG_SUN50I_ERRATUM_UNKNOWN1 | ||||||
|   |  	{ | ||||||
|  typedef bool (*ate_match_fn_t)(const struct arch_timer_erratum_workaround *, |  		.match_type = ate_match_dt, | ||||||
|  |  		.id = "allwinner,erratum-unknown1", | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user
	 Koen Vandeputte
					Koen Vandeputte