mirror of https://github.com/hak5/openwrt-owl.git
kernel: update kernel 4.4 to version 4.4.15
Signed-off-by: Hauke Mehrtens <hauke@hauke-m.de>owl
parent
d6b3b44d97
commit
efa1960abb
|
@ -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)))
|
||||
|
|
|
@ -30,9 +30,6 @@ Signed-off-by: Kishon Vijay Abraham I <kishon@ti.com>
|
|||
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 <linux/bcma/bcma_driver_chipcommon.h>
|
||||
#include <linux/bcma/bcma_driver_pci.h>
|
||||
#include <linux/bcma/bcma_driver_pcie2.h>
|
||||
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
|
||||
|
||||
|
|
|
@ -12,11 +12,9 @@ Signed-off-by: Kishon Vijay Abraham I <kishon@ti.com>
|
|||
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
|
||||
|
||||
|
|
|
@ -50,7 +50,7 @@ Signed-off-by: Hauke Mehrtens <hauke@hauke-m.de>
|
|||
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;
|
||||
}
|
||||
|
||||
|
|
|
@ -55,7 +55,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
|
|||
|
||||
--- 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 <davem@davemloft.net>
|
|||
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 <davem@davemloft.net>
|
|||
|
||||
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;
|
||||
}
|
||||
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -28,8 +28,6 @@ Signed-off-by: Vineet Gupta <vgupta@synopsys.com>
|
|||
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
|
||||
|
||||
|
|
|
@ -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,
|
||||
|
|
|
@ -1,113 +0,0 @@
|
|||
From: daniel <daniel@dd-wrt.com>
|
||||
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 <daniel@dd-wrt.com>
|
||||
Acked-by: Linus Lüssing <linus.luessing@c0d3.blue>
|
||||
Signed-off-by: David S. Miller <davem@davemloft.net>
|
||||
---
|
||||
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;
|
|
@ -52,11 +52,9 @@ Signed-off-by: Alexey Brodkin <abrodkin@synopsys.com>
|
|||
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
|
||||
|
||||
|
|
|
@ -94,7 +94,7 @@ Signed-off-by: Tim Harvey <tharvey@gateworks.com>
|
|||
#include <linux/delay.h>
|
||||
#include <linux/interrupt.h>
|
||||
#include <linux/ip.h>
|
||||
@@ -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 <tharvey@gateworks.com>
|
|||
/**
|
||||
* 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 <tharvey@gateworks.com>
|
|||
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 <tharvey@gateworks.com>
|
|||
#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 <tharvey@gateworks.com>
|
|||
/* 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);
|
||||
|
|
|
@ -1428,7 +1428,7 @@ Reviewed-by: Daniel Thompson <daniel.thompson@linaro.org>
|
|||
|
||||
/*
|
||||
* 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 <daniel.thompson@linaro.org>
|
|||
/* 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 <daniel.thompson@linaro.org>
|
|||
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 <daniel.thompson@linaro.org>
|
|||
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;
|
||||
}
|
||||
|
||||
|
|
|
@ -1420,7 +1420,7 @@ Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
|
|||
|
||||
/*
|
||||
* 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 <gregkh@linuxfoundation.org>
|
|||
/* 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 <gregkh@linuxfoundation.org>
|
|||
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 <gregkh@linuxfoundation.org>
|
|||
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;
|
||||
}
|
||||
|
||||
|
|
|
@ -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),
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
|
|
|
@ -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 */
|
||||
|
|
|
@ -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);
|
||||
|
||||
|
|
|
@ -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);
|
||||
|
|
Loading…
Reference in New Issue