From efa1960abb390d696704d029507dff671cc271fd Mon Sep 17 00:00:00 2001 From: Hauke Mehrtens Date: Wed, 13 Jul 2016 12:07:08 +0200 Subject: [PATCH] kernel: update kernel 4.4 to version 4.4.15 Signed-off-by: Hauke Mehrtens --- include/kernel-version.mk | 4 +- ...new-driver-for-USB-2.0-PHY-on-Norths.patch | 18 --- ...-ns-usb2-checking-the-wrong-variable.patch | 7 +- ...at-fix-adding-usb3-lpm-capable-quirk.patch | 2 +- ...push_rcsum-and-fix-dev_forward_skb-o.patch | 6 +- .../brcm47xx/patches-4.4/999-wl_exports.patch | 2 +- .../brcm63xx/patches-4.4/800-wl_exports.patch | 2 +- ...e-that-.debug_frame-is-generated-vs..patch | 5 - .../645-bridge_multicast_to_unicast.patch | 46 +++---- ...ooping_if_bridge_has_no_ipv6_address.patch | 113 ------------------ ...ove-annoying-warning-about-bogus-URB.patch | 7 +- ...er-mii_bus-for-SerDes-w-external-phy.patch | 10 +- ...tek-support-MTK-xHCI-host-controller.patch | 8 +- ...tek-support-MTK-xHCI-host-controller.patch | 8 +- .../ramips/patches-4.4/0085-pinmux-util.patch | 6 +- .../ramips/patches-4.4/0085-sdhci-no-wp.patch | 4 +- .../0105-set_mt7621_soc_type.patch | 2 +- .../ramips/patches-4.4/0519-gsw_mt7621.patch | 6 +- .../ramips/patches-4.4/0520-esw-gmac.patch | 10 +- ...0720-arch-mips-ralink-add-i2c-clocks.patch | 8 +- 20 files changed, 64 insertions(+), 210 deletions(-) delete mode 100644 target/linux/generic/patches-4.4/646-bridge_fix_ipv6_mc_snooping_if_bridge_has_no_ipv6_address.patch diff --git a/include/kernel-version.mk b/include/kernel-version.mk index 5304c652f6..36097bbe26 100644 --- a/include/kernel-version.mk +++ b/include/kernel-version.mk @@ -4,11 +4,11 @@ LINUX_RELEASE?=1 LINUX_VERSION-3.18 = .29 LINUX_VERSION-4.1 = .20 -LINUX_VERSION-4.4 = .14 +LINUX_VERSION-4.4 = .15 LINUX_KERNEL_MD5SUM-3.18.29 = b25737a0bc98e80d12200de93f239c28 LINUX_KERNEL_MD5SUM-4.1.20 = 075c38a3a23ca5bc80437b13606df00a -LINUX_KERNEL_MD5SUM-4.4.14 = 59e99c3bf5d495f1f95d26257962ca3e +LINUX_KERNEL_MD5SUM-4.4.15 = 7b59c25c783173969bfb62cac4f057ce ifdef KERNEL_PATCHVER LINUX_VERSION:=$(KERNEL_PATCHVER)$(strip $(LINUX_VERSION-$(KERNEL_PATCHVER))) diff --git a/target/linux/bcm53xx/patches-4.4/089-0001-phy-bcm-ns-usb2-new-driver-for-USB-2.0-PHY-on-Norths.patch b/target/linux/bcm53xx/patches-4.4/089-0001-phy-bcm-ns-usb2-new-driver-for-USB-2.0-PHY-on-Norths.patch index 870bcb8d7a..c12cdb1861 100644 --- a/target/linux/bcm53xx/patches-4.4/089-0001-phy-bcm-ns-usb2-new-driver-for-USB-2.0-PHY-on-Norths.patch +++ b/target/linux/bcm53xx/patches-4.4/089-0001-phy-bcm-ns-usb2-new-driver-for-USB-2.0-PHY-on-Norths.patch @@ -30,9 +30,6 @@ Signed-off-by: Kishon Vijay Abraham I create mode 100644 drivers/phy/phy-bcm-ns-usb2.c create mode 100644 include/linux/bcma/bcma_driver_arm_c9.h -diff --git a/Documentation/devicetree/bindings/phy/bcm-ns-usb2-phy.txt b/Documentation/devicetree/bindings/phy/bcm-ns-usb2-phy.txt -new file mode 100644 -index 0000000..a7aee9e --- /dev/null +++ b/Documentation/devicetree/bindings/phy/bcm-ns-usb2-phy.txt @@ -0,0 +1,21 @@ @@ -57,8 +54,6 @@ index 0000000..a7aee9e + clocks = <&genpll BCM_NSP_GENPLL_USB_PHY_REF_CLK>; + clock-names = "phy-ref-clk"; + }; -diff --git a/drivers/phy/Kconfig b/drivers/phy/Kconfig -index f6ff76e..f2b458f 100644 --- a/drivers/phy/Kconfig +++ b/drivers/phy/Kconfig @@ -15,6 +15,15 @@ config GENERIC_PHY @@ -77,8 +72,6 @@ index f6ff76e..f2b458f 100644 config PHY_BERLIN_USB tristate "Marvell Berlin USB PHY Driver" depends on ARCH_BERLIN && RESET_CONTROLLER && HAS_IOMEM && OF -diff --git a/drivers/phy/Makefile b/drivers/phy/Makefile -index f03fa1f..0de09e1 100644 --- a/drivers/phy/Makefile +++ b/drivers/phy/Makefile @@ -3,6 +3,7 @@ @@ -89,9 +82,6 @@ index f03fa1f..0de09e1 100644 obj-$(CONFIG_PHY_BERLIN_USB) += phy-berlin-usb.o obj-$(CONFIG_PHY_BERLIN_SATA) += phy-berlin-sata.o obj-$(CONFIG_PHY_DM816X_USB) += phy-dm816x-usb.o -diff --git a/drivers/phy/phy-bcm-ns-usb2.c b/drivers/phy/phy-bcm-ns-usb2.c -new file mode 100644 -index 0000000..95ab6b2 --- /dev/null +++ b/drivers/phy/phy-bcm-ns-usb2.c @@ -0,0 +1,137 @@ @@ -232,8 +222,6 @@ index 0000000..95ab6b2 +module_platform_driver(bcm_ns_usb2_driver); + +MODULE_LICENSE("GPL v2"); -diff --git a/include/linux/bcma/bcma.h b/include/linux/bcma/bcma.h -index 0367c63..e6b41f4 100644 --- a/include/linux/bcma/bcma.h +++ b/include/linux/bcma/bcma.h @@ -4,6 +4,7 @@ @@ -244,9 +232,6 @@ index 0367c63..e6b41f4 100644 #include #include #include -diff --git a/include/linux/bcma/bcma_driver_arm_c9.h b/include/linux/bcma/bcma_driver_arm_c9.h -new file mode 100644 -index 0000000..93bd73d --- /dev/null +++ b/include/linux/bcma/bcma_driver_arm_c9.h @@ -0,0 +1,15 @@ @@ -265,6 +250,3 @@ index 0000000..93bd73d +#define BCMA_DMU_CRU_STRAPS_CTRL_4BYTE 0x00008000 + +#endif /* LINUX_BCMA_DRIVER_ARM_C9_H_ */ --- -1.8.4.5 - diff --git a/target/linux/bcm53xx/patches-4.4/089-0002-phy-bcm-ns-usb2-checking-the-wrong-variable.patch b/target/linux/bcm53xx/patches-4.4/089-0002-phy-bcm-ns-usb2-checking-the-wrong-variable.patch index 81144dc2b3..ae3462f43e 100644 --- a/target/linux/bcm53xx/patches-4.4/089-0002-phy-bcm-ns-usb2-checking-the-wrong-variable.patch +++ b/target/linux/bcm53xx/patches-4.4/089-0002-phy-bcm-ns-usb2-checking-the-wrong-variable.patch @@ -12,11 +12,9 @@ Signed-off-by: Kishon Vijay Abraham I drivers/phy/phy-bcm-ns-usb2.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) -diff --git a/drivers/phy/phy-bcm-ns-usb2.c b/drivers/phy/phy-bcm-ns-usb2.c -index 95ab6b2..58dff80 100644 --- a/drivers/phy/phy-bcm-ns-usb2.c +++ b/drivers/phy/phy-bcm-ns-usb2.c -@@ -109,8 +109,8 @@ static int bcm_ns_usb2_probe(struct platform_device *pdev) +@@ -109,8 +109,8 @@ static int bcm_ns_usb2_probe(struct plat } usb2->phy = devm_phy_create(dev, NULL, &ops); @@ -27,6 +25,3 @@ index 95ab6b2..58dff80 100644 phy_set_drvdata(usb2->phy, usb2); platform_set_drvdata(pdev, usb2); --- -1.8.4.5 - diff --git a/target/linux/bcm53xx/patches-4.4/190-usb-xhci-plat-fix-adding-usb3-lpm-capable-quirk.patch b/target/linux/bcm53xx/patches-4.4/190-usb-xhci-plat-fix-adding-usb3-lpm-capable-quirk.patch index c120829495..e3e132cb9c 100644 --- a/target/linux/bcm53xx/patches-4.4/190-usb-xhci-plat-fix-adding-usb3-lpm-capable-quirk.patch +++ b/target/linux/bcm53xx/patches-4.4/190-usb-xhci-plat-fix-adding-usb3-lpm-capable-quirk.patch @@ -50,7 +50,7 @@ Signed-off-by: Hauke Mehrtens const struct hc_driver *driver; struct xhci_hcd *xhci; struct resource *res; -@@ -155,10 +161,6 @@ static int xhci_plat_probe(struct platfo +@@ -158,10 +164,6 @@ static int xhci_plat_probe(struct platfo goto disable_clk; } diff --git a/target/linux/brcm2708/patches-4.4/0221-bpf-add-skb_postpush_rcsum-and-fix-dev_forward_skb-o.patch b/target/linux/brcm2708/patches-4.4/0221-bpf-add-skb_postpush_rcsum-and-fix-dev_forward_skb-o.patch index f6622d5bd0..ee8548f553 100644 --- a/target/linux/brcm2708/patches-4.4/0221-bpf-add-skb_postpush_rcsum-and-fix-dev_forward_skb-o.patch +++ b/target/linux/brcm2708/patches-4.4/0221-bpf-add-skb_postpush_rcsum-and-fix-dev_forward_skb-o.patch @@ -55,7 +55,7 @@ Signed-off-by: David S. Miller --- a/net/core/filter.c +++ b/net/core/filter.c -@@ -1293,8 +1293,9 @@ static u64 bpf_skb_store_bytes(u64 r1, u +@@ -1291,8 +1291,9 @@ static u64 bpf_skb_store_bytes(u64 r1, u /* skb_store_bits cannot return -EFAULT here */ skb_store_bits(skb, offset, ptr, len); @@ -67,7 +67,7 @@ Signed-off-by: David S. Miller return 0; } -@@ -1420,8 +1421,12 @@ static u64 bpf_clone_redirect(u64 r1, u6 +@@ -1415,8 +1416,12 @@ static u64 bpf_clone_redirect(u64 r1, u6 if (unlikely(!skb2)) return -ENOMEM; @@ -81,7 +81,7 @@ Signed-off-by: David S. Miller skb2->dev = dev; skb_sender_cpu_clear(skb2); -@@ -1464,8 +1469,12 @@ int skb_do_redirect(struct sk_buff *skb) +@@ -1459,8 +1464,12 @@ int skb_do_redirect(struct sk_buff *skb) return -EINVAL; } diff --git a/target/linux/brcm47xx/patches-4.4/999-wl_exports.patch b/target/linux/brcm47xx/patches-4.4/999-wl_exports.patch index 9094ec862a..ea59f4f1db 100644 --- a/target/linux/brcm47xx/patches-4.4/999-wl_exports.patch +++ b/target/linux/brcm47xx/patches-4.4/999-wl_exports.patch @@ -12,7 +12,7 @@ static int cfe_env; --- a/arch/mips/mm/cache.c +++ b/arch/mips/mm/cache.c -@@ -60,6 +60,7 @@ void (*_dma_cache_wback)(unsigned long s +@@ -59,6 +59,7 @@ void (*_dma_cache_wback)(unsigned long s void (*_dma_cache_inv)(unsigned long start, unsigned long size); EXPORT_SYMBOL(_dma_cache_wback_inv); diff --git a/target/linux/brcm63xx/patches-4.4/800-wl_exports.patch b/target/linux/brcm63xx/patches-4.4/800-wl_exports.patch index 7f8720abb0..68d37c7506 100644 --- a/target/linux/brcm63xx/patches-4.4/800-wl_exports.patch +++ b/target/linux/brcm63xx/patches-4.4/800-wl_exports.patch @@ -15,7 +15,7 @@ unsigned int check_len; --- a/arch/mips/mm/cache.c +++ b/arch/mips/mm/cache.c -@@ -60,6 +60,7 @@ void (*_dma_cache_wback)(unsigned long s +@@ -59,6 +59,7 @@ void (*_dma_cache_wback)(unsigned long s void (*_dma_cache_inv)(unsigned long start, unsigned long size); EXPORT_SYMBOL(_dma_cache_wback_inv); diff --git a/target/linux/generic/patches-4.4/095-ARC-unwind-ensure-that-.debug_frame-is-generated-vs..patch b/target/linux/generic/patches-4.4/095-ARC-unwind-ensure-that-.debug_frame-is-generated-vs..patch index a1e287c6be..b86c98de6c 100644 --- a/target/linux/generic/patches-4.4/095-ARC-unwind-ensure-that-.debug_frame-is-generated-vs..patch +++ b/target/linux/generic/patches-4.4/095-ARC-unwind-ensure-that-.debug_frame-is-generated-vs..patch @@ -28,8 +28,6 @@ Signed-off-by: Vineet Gupta arch/arc/Makefile | 2 -- 1 file changed, 2 deletions(-) -diff --git a/arch/arc/Makefile b/arch/arc/Makefile -index aeb1902..209d845 100644 --- a/arch/arc/Makefile +++ b/arch/arc/Makefile @@ -48,8 +48,6 @@ endif @@ -41,6 +39,3 @@ index aeb1902..209d845 100644 # By default gcc 4.8 generates dwarf4 which kernel unwinder can't grok ifeq ($(atleast_gcc48),y) cflags-$(CONFIG_ARC_DW2_UNWIND) += -gdwarf-2 --- -2.5.5 - diff --git a/target/linux/generic/patches-4.4/645-bridge_multicast_to_unicast.patch b/target/linux/generic/patches-4.4/645-bridge_multicast_to_unicast.patch index bab091262c..07fc097f1d 100644 --- a/target/linux/generic/patches-4.4/645-bridge_multicast_to_unicast.patch +++ b/target/linux/generic/patches-4.4/645-bridge_multicast_to_unicast.patch @@ -31,7 +31,7 @@ Implement optinal multicast->unicast conversion for igmp snooping #endif unsigned int br_mdb_rehash_seq; -@@ -649,7 +650,8 @@ struct net_bridge_port_group *br_multica +@@ -652,7 +653,8 @@ struct net_bridge_port_group *br_multica struct net_bridge_port *port, struct br_ip *group, struct net_bridge_port_group __rcu *next, @@ -41,7 +41,7 @@ Implement optinal multicast->unicast conversion for igmp snooping { struct net_bridge_port_group *p; -@@ -664,12 +666,33 @@ struct net_bridge_port_group *br_multica +@@ -667,12 +669,33 @@ struct net_bridge_port_group *br_multica hlist_add_head(&p->mglist, &port->mglist); setup_timer(&p->timer, br_multicast_port_group_expired, (unsigned long)p); @@ -76,7 +76,7 @@ Implement optinal multicast->unicast conversion for igmp snooping { struct net_bridge_mdb_entry *mp; struct net_bridge_port_group *p; -@@ -696,13 +719,13 @@ static int br_multicast_add_group(struct +@@ -699,13 +722,13 @@ static int br_multicast_add_group(struct for (pp = &mp->ports; (p = mlock_dereference(*pp, br)) != NULL; pp = &p->next) { @@ -92,7 +92,7 @@ Implement optinal multicast->unicast conversion for igmp snooping if (unlikely(!p)) goto err; rcu_assign_pointer(*pp, p); -@@ -721,7 +744,7 @@ err: +@@ -724,7 +747,7 @@ err: static int br_ip4_multicast_add_group(struct net_bridge *br, struct net_bridge_port *port, __be32 group, @@ -101,7 +101,7 @@ Implement optinal multicast->unicast conversion for igmp snooping { struct br_ip br_group; -@@ -732,14 +755,14 @@ static int br_ip4_multicast_add_group(st +@@ -735,14 +758,14 @@ static int br_ip4_multicast_add_group(st br_group.proto = htons(ETH_P_IP); br_group.vid = vid; @@ -118,7 +118,7 @@ Implement optinal multicast->unicast conversion for igmp snooping { struct br_ip br_group; -@@ -750,7 +773,7 @@ static int br_ip6_multicast_add_group(st +@@ -753,7 +776,7 @@ static int br_ip6_multicast_add_group(st br_group.proto = htons(ETH_P_IPV6); br_group.vid = vid; @@ -127,7 +127,7 @@ Implement optinal multicast->unicast conversion for igmp snooping } #endif -@@ -995,6 +1018,7 @@ static int br_ip4_multicast_igmp3_report +@@ -998,6 +1021,7 @@ static int br_ip4_multicast_igmp3_report struct sk_buff *skb, u16 vid) { @@ -135,7 +135,7 @@ Implement optinal multicast->unicast conversion for igmp snooping struct igmpv3_report *ih; struct igmpv3_grec *grec; int i; -@@ -1035,12 +1059,13 @@ static int br_ip4_multicast_igmp3_report +@@ -1038,12 +1062,13 @@ static int br_ip4_multicast_igmp3_report continue; } @@ -151,7 +151,7 @@ Implement optinal multicast->unicast conversion for igmp snooping if (err) break; } -@@ -1055,6 +1080,7 @@ static int br_ip6_multicast_mld2_report( +@@ -1058,6 +1083,7 @@ static int br_ip6_multicast_mld2_report( struct sk_buff *skb, u16 vid) { @@ -159,7 +159,7 @@ Implement optinal multicast->unicast conversion for igmp snooping struct icmp6hdr *icmp6h; struct mld2_grec *grec; int i; -@@ -1106,10 +1132,10 @@ static int br_ip6_multicast_mld2_report( +@@ -1109,10 +1135,10 @@ static int br_ip6_multicast_mld2_report( grec->grec_type == MLD2_MODE_IS_INCLUDE) && ntohs(*nsrcs) == 0) { br_ip6_multicast_leave_group(br, port, &grec->grec_mca, @@ -172,7 +172,7 @@ Implement optinal multicast->unicast conversion for igmp snooping if (!err) break; } -@@ -1424,7 +1450,8 @@ br_multicast_leave_group(struct net_brid +@@ -1427,7 +1453,8 @@ br_multicast_leave_group(struct net_brid struct net_bridge_port *port, struct br_ip *group, struct bridge_mcast_other_query *other_query, @@ -182,7 +182,7 @@ Implement optinal multicast->unicast conversion for igmp snooping { struct net_bridge_mdb_htable *mdb; struct net_bridge_mdb_entry *mp; -@@ -1448,7 +1475,7 @@ br_multicast_leave_group(struct net_brid +@@ -1451,7 +1478,7 @@ br_multicast_leave_group(struct net_brid for (pp = &mp->ports; (p = mlock_dereference(*pp, br)) != NULL; pp = &p->next) { @@ -191,7 +191,7 @@ Implement optinal multicast->unicast conversion for igmp snooping continue; rcu_assign_pointer(*pp, p->next); -@@ -1511,7 +1538,7 @@ br_multicast_leave_group(struct net_brid +@@ -1514,7 +1541,7 @@ br_multicast_leave_group(struct net_brid for (p = mlock_dereference(mp->ports, br); p != NULL; p = mlock_dereference(p->next, br)) { @@ -200,7 +200,7 @@ Implement optinal multicast->unicast conversion for igmp snooping continue; if (!hlist_unhashed(&p->mglist) && -@@ -1529,8 +1556,8 @@ out: +@@ -1532,8 +1559,8 @@ out: static void br_ip4_multicast_leave_group(struct net_bridge *br, struct net_bridge_port *port, @@ -211,7 +211,7 @@ Implement optinal multicast->unicast conversion for igmp snooping { struct br_ip br_group; struct bridge_mcast_own_query *own_query; -@@ -1545,14 +1572,14 @@ static void br_ip4_multicast_leave_group +@@ -1548,14 +1575,14 @@ static void br_ip4_multicast_leave_group br_group.vid = vid; br_multicast_leave_group(br, port, &br_group, &br->ip4_other_query, @@ -228,7 +228,7 @@ Implement optinal multicast->unicast conversion for igmp snooping { struct br_ip br_group; struct bridge_mcast_own_query *own_query; -@@ -1567,7 +1594,7 @@ static void br_ip6_multicast_leave_group +@@ -1570,7 +1597,7 @@ static void br_ip6_multicast_leave_group br_group.vid = vid; br_multicast_leave_group(br, port, &br_group, &br->ip6_other_query, @@ -237,7 +237,7 @@ Implement optinal multicast->unicast conversion for igmp snooping } #endif -@@ -1576,6 +1603,7 @@ static int br_multicast_ipv4_rcv(struct +@@ -1579,6 +1606,7 @@ static int br_multicast_ipv4_rcv(struct struct sk_buff *skb, u16 vid) { @@ -245,7 +245,7 @@ Implement optinal multicast->unicast conversion for igmp snooping struct sk_buff *skb_trimmed = NULL; struct igmphdr *ih; int err; -@@ -1592,12 +1620,13 @@ static int br_multicast_ipv4_rcv(struct +@@ -1595,12 +1623,13 @@ static int br_multicast_ipv4_rcv(struct BR_INPUT_SKB_CB(skb)->igmp = 1; ih = igmp_hdr(skb); @@ -260,7 +260,7 @@ Implement optinal multicast->unicast conversion for igmp snooping break; case IGMPV3_HOST_MEMBERSHIP_REPORT: err = br_ip4_multicast_igmp3_report(br, port, skb_trimmed, vid); -@@ -1606,7 +1635,7 @@ static int br_multicast_ipv4_rcv(struct +@@ -1609,7 +1638,7 @@ static int br_multicast_ipv4_rcv(struct err = br_ip4_multicast_query(br, port, skb_trimmed, vid); break; case IGMP_HOST_LEAVE_MESSAGE: @@ -269,7 +269,7 @@ Implement optinal multicast->unicast conversion for igmp snooping break; } -@@ -1622,6 +1651,7 @@ static int br_multicast_ipv6_rcv(struct +@@ -1625,6 +1654,7 @@ static int br_multicast_ipv6_rcv(struct struct sk_buff *skb, u16 vid) { @@ -277,7 +277,7 @@ Implement optinal multicast->unicast conversion for igmp snooping struct sk_buff *skb_trimmed = NULL; struct mld_msg *mld; int err; -@@ -1641,8 +1671,9 @@ static int br_multicast_ipv6_rcv(struct +@@ -1644,8 +1674,9 @@ static int br_multicast_ipv6_rcv(struct switch (mld->mld_type) { case ICMPV6_MGM_REPORT: @@ -288,7 +288,7 @@ Implement optinal multicast->unicast conversion for igmp snooping break; case ICMPV6_MLD2_REPORT: err = br_ip6_multicast_mld2_report(br, port, skb_trimmed, vid); -@@ -1651,7 +1682,8 @@ static int br_multicast_ipv6_rcv(struct +@@ -1654,7 +1685,8 @@ static int br_multicast_ipv6_rcv(struct err = br_ip6_multicast_query(br, port, skb_trimmed, vid); break; case ICMPV6_MGM_REDUCTION: @@ -310,7 +310,7 @@ Implement optinal multicast->unicast conversion for igmp snooping }; struct net_bridge_mdb_entry -@@ -554,7 +556,8 @@ void br_multicast_free_pg(struct rcu_hea +@@ -555,7 +557,8 @@ void br_multicast_free_pg(struct rcu_hea struct net_bridge_port_group * br_multicast_new_port_group(struct net_bridge_port *port, struct br_ip *group, struct net_bridge_port_group __rcu *next, diff --git a/target/linux/generic/patches-4.4/646-bridge_fix_ipv6_mc_snooping_if_bridge_has_no_ipv6_address.patch b/target/linux/generic/patches-4.4/646-bridge_fix_ipv6_mc_snooping_if_bridge_has_no_ipv6_address.patch deleted file mode 100644 index 4388cda6ef..0000000000 --- a/target/linux/generic/patches-4.4/646-bridge_fix_ipv6_mc_snooping_if_bridge_has_no_ipv6_address.patch +++ /dev/null @@ -1,113 +0,0 @@ -From: daniel -Date: Fri, 24 Jun 2016 12:35:18 +0200 -Subject: [PATCH] Bridge: Fix ipv6 mc snooping if bridge has no ipv6 address - -The bridge is falsly dropping ipv6 mulitcast packets if there is: - 1. No ipv6 address assigned on the brigde. - 2. No external mld querier present. - 3. The internal querier enabled. - -When the bridge fails to build mld queries, because it has no -ipv6 address, it slilently returns, but keeps the local querier enabled. -This specific case causes confusing packet loss. - -Ipv6 multicast snooping can only work if: - a) An external querier is present - OR - b) The bridge has an ipv6 address an is capable of sending own queries - -Otherwise it has to forward/flood the ipv6 multicast traffic, -because snooping cannot work. - -This patch fixes the issue by adding a flag to the bridge struct that -indicates that there is currently no ipv6 address assinged to the bridge -and returns a false state for the local querier in -__br_multicast_querier_exists(). - -Special thanks to Linus Lüssing. - -Fixes: d1d81d4c3dd8 ("bridge: check return value of ipv6_dev_get_saddr()") -Signed-off-by: Daniel Danzberger -Acked-by: Linus Lüssing -Signed-off-by: David S. Miller ---- - net/bridge/br_multicast.c | 4 ++++ - net/bridge/br_private.h | 23 +++++++++++++++++++---- - 2 files changed, 23 insertions(+), 4 deletions(-) - -diff --git a/net/bridge/br_multicast.c b/net/bridge/br_multicast.c -index c8c2a8a..d063a10 100644 ---- a/net/bridge/br_multicast.c -+++ b/net/bridge/br_multicast.c -@@ -465,8 +465,11 @@ static struct sk_buff *br_ip6_multicast_alloc_query(struct net_bridge *br, - if (ipv6_dev_get_saddr(dev_net(br->dev), br->dev, &ip6h->daddr, 0, - &ip6h->saddr)) { - kfree_skb(skb); -+ br->has_ipv6_addr = 0; - return NULL; - } -+ -+ br->has_ipv6_addr = 1; - ipv6_eth_mc_map(&ip6h->daddr, eth->h_dest); - - hopopt = (u8 *)(ip6h + 1); -@@ -1768,6 +1771,7 @@ void br_multicast_init(struct net_bridge *br) - br->ip6_other_query.delay_time = 0; - br->ip6_querier.port = NULL; - #endif -+ br->has_ipv6_addr = 1; - - spin_lock_init(&br->multicast_lock); - setup_timer(&br->multicast_router_timer, -diff --git a/net/bridge/br_private.h b/net/bridge/br_private.h -index e24abfd..3dd7e2c 100644 ---- a/net/bridge/br_private.h -+++ b/net/bridge/br_private.h -@@ -303,6 +303,7 @@ struct net_bridge - u8 multicast_disabled:1; - u8 multicast_querier:1; - u8 multicast_query_use_ifaddr:1; -+ u8 has_ipv6_addr:1; - - u32 hash_elasticity; - u32 hash_max; -@@ -577,10 +578,22 @@ static inline bool br_multicast_is_router(struct net_bridge *br) - - static inline bool - __br_multicast_querier_exists(struct net_bridge *br, -- struct bridge_mcast_other_query *querier) -+ struct bridge_mcast_other_query *querier, -+ const bool is_ipv6) - { -+ bool own_querier_enabled; -+ -+ if (br->multicast_querier) { -+ if (is_ipv6 && !br->has_ipv6_addr) -+ own_querier_enabled = false; -+ else -+ own_querier_enabled = true; -+ } else { -+ own_querier_enabled = false; -+ } -+ - return time_is_before_jiffies(querier->delay_time) && -- (br->multicast_querier || timer_pending(&querier->timer)); -+ (own_querier_enabled || timer_pending(&querier->timer)); - } - - static inline bool br_multicast_querier_exists(struct net_bridge *br, -@@ -588,10 +601,12 @@ static inline bool br_multicast_querier_exists(struct net_bridge *br, - { - switch (eth->h_proto) { - case (htons(ETH_P_IP)): -- return __br_multicast_querier_exists(br, &br->ip4_other_query); -+ return __br_multicast_querier_exists(br, -+ &br->ip4_other_query, false); - #if IS_ENABLED(CONFIG_IPV6) - case (htons(ETH_P_IPV6)): -- return __br_multicast_querier_exists(br, &br->ip6_other_query); -+ return __br_multicast_querier_exists(br, -+ &br->ip6_other_query, true); - #endif - default: - return false; diff --git a/target/linux/generic/patches-4.4/821-usb-Remove-annoying-warning-about-bogus-URB.patch b/target/linux/generic/patches-4.4/821-usb-Remove-annoying-warning-about-bogus-URB.patch index 0aae481a20..c7aeb49e24 100644 --- a/target/linux/generic/patches-4.4/821-usb-Remove-annoying-warning-about-bogus-URB.patch +++ b/target/linux/generic/patches-4.4/821-usb-Remove-annoying-warning-about-bogus-URB.patch @@ -52,11 +52,9 @@ Signed-off-by: Alexey Brodkin drivers/usb/core/urb.c | 5 ----- 1 file changed, 5 deletions(-) -diff --git a/drivers/usb/core/urb.c b/drivers/usb/core/urb.c -index 3d27477..a317e1e 100644 --- a/drivers/usb/core/urb.c +++ b/drivers/usb/core/urb.c -@@ -443,11 +443,6 @@ int usb_submit_urb(struct urb *urb, gfp_t mem_flags) +@@ -443,11 +443,6 @@ int usb_submit_urb(struct urb *urb, gfp_ * cause problems in HCDs if they get it wrong. */ @@ -68,6 +66,3 @@ index 3d27477..a317e1e 100644 /* Check against a simple/standard policy */ allowed = (URB_NO_TRANSFER_DMA_MAP | URB_NO_INTERRUPT | URB_DIR_MASK | URB_FREE_BUFFER); --- -2.5.5 - diff --git a/target/linux/imx6/patches-4.4/204-net-igb-register-mii_bus-for-SerDes-w-external-phy.patch b/target/linux/imx6/patches-4.4/204-net-igb-register-mii_bus-for-SerDes-w-external-phy.patch index a179900313..2b1cf9627b 100644 --- a/target/linux/imx6/patches-4.4/204-net-igb-register-mii_bus-for-SerDes-w-external-phy.patch +++ b/target/linux/imx6/patches-4.4/204-net-igb-register-mii_bus-for-SerDes-w-external-phy.patch @@ -94,7 +94,7 @@ Signed-off-by: Tim Harvey #include #include #include -@@ -2223,6 +2224,126 @@ static s32 igb_init_i2c(struct igb_adapt +@@ -2217,6 +2218,126 @@ static s32 igb_init_i2c(struct igb_adapt return status; } @@ -221,7 +221,7 @@ Signed-off-by: Tim Harvey /** * igb_probe - Device Initialization Routine * @pdev: PCI device information struct -@@ -2645,6 +2766,13 @@ static int igb_probe(struct pci_dev *pde +@@ -2639,6 +2760,13 @@ static int igb_probe(struct pci_dev *pde } } pm_runtime_put_noidle(&pdev->dev); @@ -235,7 +235,7 @@ Signed-off-by: Tim Harvey return 0; err_register: -@@ -2792,6 +2920,10 @@ static void igb_remove(struct pci_dev *p +@@ -2786,6 +2914,10 @@ static void igb_remove(struct pci_dev *p struct e1000_hw *hw = &adapter->hw; pm_runtime_get_noresume(&pdev->dev); @@ -246,7 +246,7 @@ Signed-off-by: Tim Harvey #ifdef CONFIG_IGB_HWMON igb_sysfs_exit(adapter); #endif -@@ -3108,6 +3240,12 @@ static int __igb_open(struct net_device +@@ -3102,6 +3234,12 @@ static int __igb_open(struct net_device if (!resuming) pm_runtime_put(&pdev->dev); @@ -259,7 +259,7 @@ Signed-off-by: Tim Harvey /* start the watchdog. */ hw->mac.get_link_status = 1; schedule_work(&adapter->watchdog_task); -@@ -7099,21 +7237,41 @@ void igb_alloc_rx_buffers(struct igb_rin +@@ -7093,21 +7231,41 @@ void igb_alloc_rx_buffers(struct igb_rin static int igb_mii_ioctl(struct net_device *netdev, struct ifreq *ifr, int cmd) { struct igb_adapter *adapter = netdev_priv(netdev); diff --git a/target/linux/mediatek/patches-4.4/0019-xhci-mediatek-support-MTK-xHCI-host-controller.patch b/target/linux/mediatek/patches-4.4/0019-xhci-mediatek-support-MTK-xHCI-host-controller.patch index f344be6fdd..1c4816f121 100644 --- a/target/linux/mediatek/patches-4.4/0019-xhci-mediatek-support-MTK-xHCI-host-controller.patch +++ b/target/linux/mediatek/patches-4.4/0019-xhci-mediatek-support-MTK-xHCI-host-controller.patch @@ -1428,7 +1428,7 @@ Reviewed-by: Daniel Thompson /* * Returns zero if the TRB isn't in this segment, otherwise it returns the DMA -@@ -3065,17 +3066,22 @@ static u32 xhci_td_remainder(struct xhci +@@ -3083,17 +3084,22 @@ static u32 xhci_td_remainder(struct xhci { u32 maxp, total_packet_count; @@ -1455,7 +1455,7 @@ Reviewed-by: Daniel Thompson /* Queueing functions don't count the current TRB into transferred */ return (total_packet_count - ((transferred + trb_buff_len) / maxp)); } -@@ -3463,7 +3469,7 @@ int xhci_queue_ctrl_tx(struct xhci_hcd * +@@ -3481,7 +3487,7 @@ int xhci_queue_ctrl_tx(struct xhci_hcd * field |= 0x1; /* xHCI 1.0/1.1 6.4.1.2.1: Transfer Type field */ @@ -1487,7 +1487,7 @@ Reviewed-by: Daniel Thompson writel(temp, &xhci->ir_set->irq_control); /* Set the HCD state before we enable the irqs */ -@@ -1701,6 +1706,9 @@ int xhci_drop_endpoint(struct usb_hcd *h +@@ -1704,6 +1709,9 @@ int xhci_drop_endpoint(struct usb_hcd *h xhci_endpoint_zero(xhci, xhci->devs[udev->slot_id], ep); @@ -1497,7 +1497,7 @@ Reviewed-by: Daniel Thompson xhci_dbg(xhci, "drop ep 0x%x, slot id %d, new drop flags = %#x, new add flags = %#x\n", (unsigned int) ep->desc.bEndpointAddress, udev->slot_id, -@@ -1796,6 +1804,15 @@ int xhci_add_endpoint(struct usb_hcd *hc +@@ -1799,6 +1807,15 @@ int xhci_add_endpoint(struct usb_hcd *hc return -ENOMEM; } diff --git a/target/linux/ramips/patches-4.4/0033-xhci-mediatek-support-MTK-xHCI-host-controller.patch b/target/linux/ramips/patches-4.4/0033-xhci-mediatek-support-MTK-xHCI-host-controller.patch index 4107d49ce6..1cac9a22bc 100644 --- a/target/linux/ramips/patches-4.4/0033-xhci-mediatek-support-MTK-xHCI-host-controller.patch +++ b/target/linux/ramips/patches-4.4/0033-xhci-mediatek-support-MTK-xHCI-host-controller.patch @@ -1420,7 +1420,7 @@ Signed-off-by: Greg Kroah-Hartman /* * Returns zero if the TRB isn't in this segment, otherwise it returns the DMA -@@ -3065,17 +3066,22 @@ static u32 xhci_td_remainder(struct xhci +@@ -3083,17 +3084,22 @@ static u32 xhci_td_remainder(struct xhci { u32 maxp, total_packet_count; @@ -1447,7 +1447,7 @@ Signed-off-by: Greg Kroah-Hartman /* Queueing functions don't count the current TRB into transferred */ return (total_packet_count - ((transferred + trb_buff_len) / maxp)); } -@@ -3463,7 +3469,7 @@ int xhci_queue_ctrl_tx(struct xhci_hcd * +@@ -3481,7 +3487,7 @@ int xhci_queue_ctrl_tx(struct xhci_hcd * field |= 0x1; /* xHCI 1.0/1.1 6.4.1.2.1: Transfer Type field */ @@ -1479,7 +1479,7 @@ Signed-off-by: Greg Kroah-Hartman writel(temp, &xhci->ir_set->irq_control); /* Set the HCD state before we enable the irqs */ -@@ -1701,6 +1706,9 @@ int xhci_drop_endpoint(struct usb_hcd *h +@@ -1704,6 +1709,9 @@ int xhci_drop_endpoint(struct usb_hcd *h xhci_endpoint_zero(xhci, xhci->devs[udev->slot_id], ep); @@ -1489,7 +1489,7 @@ Signed-off-by: Greg Kroah-Hartman xhci_dbg(xhci, "drop ep 0x%x, slot id %d, new drop flags = %#x, new add flags = %#x\n", (unsigned int) ep->desc.bEndpointAddress, udev->slot_id, -@@ -1796,6 +1804,15 @@ int xhci_add_endpoint(struct usb_hcd *hc +@@ -1799,6 +1807,15 @@ int xhci_add_endpoint(struct usb_hcd *hc return -ENOMEM; } diff --git a/target/linux/ramips/patches-4.4/0085-pinmux-util.patch b/target/linux/ramips/patches-4.4/0085-pinmux-util.patch index 4acbc3311f..e2f1d60051 100644 --- a/target/linux/ramips/patches-4.4/0085-pinmux-util.patch +++ b/target/linux/ramips/patches-4.4/0085-pinmux-util.patch @@ -1,6 +1,6 @@ --- a/arch/mips/ralink/mt7620.c +++ b/arch/mips/ralink/mt7620.c -@@ -176,7 +176,7 @@ +@@ -176,7 +176,7 @@ static struct rt2880_pmx_func spi_cs1_gr static struct rt2880_pmx_func spis_grp_mt7628[] = { FUNC("pwm", 3, 14, 4), @@ -9,7 +9,7 @@ FUNC("gpio", 1, 14, 4), FUNC("spis", 0, 14, 4), }; -@@ -190,28 +190,28 @@ +@@ -190,28 +190,28 @@ static struct rt2880_pmx_func gpio_grp_m static struct rt2880_pmx_func p4led_kn_grp_mt7628[] = { FUNC("jtag", 3, 30, 1), @@ -42,7 +42,7 @@ FUNC("gpio", 1, 33, 1), FUNC("p1led_kn", 0, 33, 1), }; -@@ -232,28 +232,28 @@ +@@ -232,28 +232,28 @@ static struct rt2880_pmx_func wled_kn_gr static struct rt2880_pmx_func p4led_an_grp_mt7628[] = { FUNC("jtag", 3, 39, 1), diff --git a/target/linux/ramips/patches-4.4/0085-sdhci-no-wp.patch b/target/linux/ramips/patches-4.4/0085-sdhci-no-wp.patch index 46b1a6c04c..8bb0352ac2 100644 --- a/target/linux/ramips/patches-4.4/0085-sdhci-no-wp.patch +++ b/target/linux/ramips/patches-4.4/0085-sdhci-no-wp.patch @@ -1,6 +1,6 @@ --- a/drivers/mmc/host/mtk-mmc/sd.c +++ b/drivers/mmc/host/mtk-mmc/sd.c -@@ -195,7 +195,7 @@ +@@ -195,7 +195,7 @@ struct msdc_hw msdc0_hw = { .dat_drv = 4, .data_pins = 4, .data_offset = 0, @@ -9,7 +9,7 @@ // .flags = MSDC_SYS_SUSPEND | MSDC_WP_PIN_EN | MSDC_CD_PIN_EN | MSDC_REMOVABLE, }; -@@ -2746,6 +2746,9 @@ +@@ -2746,6 +2746,9 @@ static int msdc_drv_probe(struct platfor int ret, irq; pdev->dev.platform_data = &msdc0_hw; diff --git a/target/linux/ramips/patches-4.4/0105-set_mt7621_soc_type.patch b/target/linux/ramips/patches-4.4/0105-set_mt7621_soc_type.patch index 0ffe82545e..9896ebb1d2 100644 --- a/target/linux/ramips/patches-4.4/0105-set_mt7621_soc_type.patch +++ b/target/linux/ramips/patches-4.4/0105-set_mt7621_soc_type.patch @@ -1,6 +1,6 @@ --- a/arch/mips/ralink/mt7621.c +++ b/arch/mips/ralink/mt7621.c -@@ -180,7 +180,7 @@ +@@ -180,7 +180,7 @@ void prom_soc_init(struct ralink_soc_inf } else { panic("mt7621: unknown SoC, n0:%08x n1:%08x\n", n0, n1); } diff --git a/target/linux/ramips/patches-4.4/0519-gsw_mt7621.patch b/target/linux/ramips/patches-4.4/0519-gsw_mt7621.patch index c5e73d5ca8..67e9060ea0 100644 --- a/target/linux/ramips/patches-4.4/0519-gsw_mt7621.patch +++ b/target/linux/ramips/patches-4.4/0519-gsw_mt7621.patch @@ -1,6 +1,6 @@ --- a/drivers/net/ethernet/mediatek/mt7530.c +++ b/drivers/net/ethernet/mediatek/mt7530.c -@@ -539,6 +539,7 @@ +@@ -539,6 +539,7 @@ mt7530_apply_config(struct switch_dev *d u8 etags = priv->vlan_entries[i].etags; u32 val; @@ -8,7 +8,7 @@ /* vid of vlan */ val = mt7530_r32(priv, REG_ESW_VLAN_VTIM(i)); if (i % 2 == 0) { -@@ -549,7 +550,7 @@ +@@ -549,7 +550,7 @@ mt7530_apply_config(struct switch_dev *d val |= (vid << 12); } mt7530_w32(priv, REG_ESW_VLAN_VTIM(i), val); @@ -17,7 +17,7 @@ /* vlan port membership */ if (member) mt7530_w32(priv, REG_ESW_VLAN_VAWD1, REG_ESW_VLAN_VAWD1_IVL_MAC | -@@ -569,7 +570,11 @@ +@@ -569,7 +570,11 @@ mt7530_apply_config(struct switch_dev *d mt7530_w32(priv, REG_ESW_VLAN_VAWD2, val); /* write to vlan table */ diff --git a/target/linux/ramips/patches-4.4/0520-esw-gmac.patch b/target/linux/ramips/patches-4.4/0520-esw-gmac.patch index 9d4cd3f4c1..ae5fa16d66 100644 --- a/target/linux/ramips/patches-4.4/0520-esw-gmac.patch +++ b/target/linux/ramips/patches-4.4/0520-esw-gmac.patch @@ -1,6 +1,6 @@ --- a/drivers/net/ethernet/mediatek/esw_rt3050.c +++ b/drivers/net/ethernet/mediatek/esw_rt3050.c -@@ -221,6 +221,8 @@ +@@ -221,6 +221,8 @@ struct rt305x_esw { unsigned char port_map; unsigned char port_disable; @@ -9,7 +9,7 @@ unsigned int reg_led_polarity; struct switch_dev swdev; -@@ -452,7 +454,10 @@ +@@ -452,7 +454,10 @@ static void esw_hw_init(struct rt305x_es (RT305X_ESW_PORTS_NOCPU << RT305X_ESW_POC2_UNTAG_EN_S)), RT305X_ESW_REG_POC2); @@ -21,7 +21,7 @@ /* 300s aging timer, max packet len 1536, broadcast storm prevention * disabled, disable collision abort, mac xor48 hash, 10 packet back -@@ -475,7 +480,10 @@ +@@ -475,7 +480,10 @@ static void esw_hw_init(struct rt305x_es * port5: disabled * port6: enabled, gige, full-duplex, rx/tx-flow-control */ @@ -33,7 +33,7 @@ esw_w32(esw, 0x00000000, RT305X_ESW_REG_FPA); /* Force Link/Activity on ports */ -@@ -1361,6 +1369,14 @@ +@@ -1361,6 +1369,14 @@ static int esw_probe(struct platform_dev if (port_disable) esw->port_disable = be32_to_cpu(*port_disable); @@ -48,7 +48,7 @@ reg_init = of_get_property(np, "mediatek,led_polarity", NULL); if (reg_init) esw->reg_led_polarity = be32_to_cpu(*reg_init); -@@ -1386,6 +1402,18 @@ +@@ -1386,6 +1402,18 @@ static int esw_probe(struct platform_dev esw_hw_init(esw); diff --git a/target/linux/ramips/patches-4.4/0720-arch-mips-ralink-add-i2c-clocks.patch b/target/linux/ramips/patches-4.4/0720-arch-mips-ralink-add-i2c-clocks.patch index 500625b4e5..e9e72ad11a 100644 --- a/target/linux/ramips/patches-4.4/0720-arch-mips-ralink-add-i2c-clocks.patch +++ b/target/linux/ramips/patches-4.4/0720-arch-mips-ralink-add-i2c-clocks.patch @@ -1,6 +1,6 @@ --- a/arch/mips/ralink/mt7620.c +++ b/arch/mips/ralink/mt7620.c -@@ -509,6 +509,7 @@ void __init ralink_clk_init(void) +@@ -513,6 +513,7 @@ void __init ralink_clk_init(void) unsigned long sys_rate; unsigned long dram_rate; unsigned long periph_rate; @@ -8,7 +8,7 @@ xtal_rate = mt7620_get_xtal_rate(); -@@ -523,6 +524,7 @@ void __init ralink_clk_init(void) +@@ -527,6 +528,7 @@ void __init ralink_clk_init(void) cpu_rate = MHZ(575); dram_rate = sys_rate = cpu_rate / 3; periph_rate = MHZ(40); @@ -16,7 +16,7 @@ ralink_clk_add("10000d00.uartlite", periph_rate); ralink_clk_add("10000e00.uartlite", periph_rate); -@@ -534,6 +536,7 @@ void __init ralink_clk_init(void) +@@ -538,6 +540,7 @@ void __init ralink_clk_init(void) dram_rate = mt7620_get_dram_rate(pll_rate); sys_rate = mt7620_get_sys_rate(cpu_rate); periph_rate = mt7620_get_periph_rate(xtal_rate); @@ -24,7 +24,7 @@ pr_debug(RFMT("XTAL") RFMT("CPU_PLL") RFMT("PLL"), RINT(xtal_rate), RFRAC(xtal_rate), -@@ -555,6 +558,8 @@ void __init ralink_clk_init(void) +@@ -559,6 +562,8 @@ void __init ralink_clk_init(void) ralink_clk_add("cpu", cpu_rate); ralink_clk_add("10000100.timer", periph_rate); ralink_clk_add("10000120.watchdog", periph_rate); -- 2.25.1