From a44076d63c2acc88ee9c062bf4a2d1f3cdf60c39 Mon Sep 17 00:00:00 2001 From: JoseCoW <88561480+JoseCoW@users.noreply.github.com> Date: Thu, 17 Mar 2022 23:12:46 +0800 Subject: [PATCH] Fix offset for some patches of kernel-5.4 (#9085) --- ...k-events-support-multiple-registrant.patch | 2 +- ...-linux-kernel-to-support-shortcut-fe.patch | 10 ++-- ...ylink-re-split-__phylink_connect_phy.patch | 2 +- ...y-MAC-configuration-for-copper-SFP-m.patch | 2 +- ...arch-arm-force-ZRELADDR-on-arch-qcom.patch | 2 +- ...Mangle-bootloader-s-kernel-arguments.patch | 2 +- .../900-arm-add-cmdline-override.patch | 2 +- ...s-in-dts-files-for-NSS-support.patch.patch | 6 +- ...apping-remove-dmac_clean_range-and-d.patch | 2 +- .../999-03a-qca-nss-ecm-support.patch | 60 +++++++++---------- .../999-03b-qca-nss-ecm-support.patch | 14 ++--- ...99-03c-qca-nss-pppoe-offload-support.patch | 20 ++----- ...99-03d-qca-nss-pppoe-offload-support.patch | 15 +---- ...99-03e-qca-nss-pppoe-offload-support.patch | 8 +-- .../999-04-qca-nss-cfi-support.patch | 8 +-- ...99-07b-qca-nss-clients-qdisc-support.patch | 12 ++-- .../999-07c-qca-nss-clients-ppp-support.patch | 18 +++--- .../999-07d-qca-nss-clients-ppp-support.patch | 12 ++-- ...07e-qca-nss-clients-iptunnel-support.patch | 6 +- .../patches-5.4/999-08-qca-mcs-support.patch | 26 ++++---- 20 files changed, 102 insertions(+), 127 deletions(-) diff --git a/target/linux/generic/hack-5.4/952-net-conntrack-events-support-multiple-registrant.patch b/target/linux/generic/hack-5.4/952-net-conntrack-events-support-multiple-registrant.patch index 31a53dd52..c76344959 100644 --- a/target/linux/generic/hack-5.4/952-net-conntrack-events-support-multiple-registrant.patch +++ b/target/linux/generic/hack-5.4/952-net-conntrack-events-support-multiple-registrant.patch @@ -115,7 +115,7 @@ Signed-off-by: Zhi Chen depends on NETFILTER_ADVANCED --- a/net/netfilter/nf_conntrack_core.c +++ b/net/netfilter/nf_conntrack_core.c -@@ -2597,6 +2597,9 @@ int nf_conntrack_init_net(struct net *ne +@@ -2572,6 +2572,9 @@ int nf_conntrack_init_net(struct net *ne nf_conntrack_helper_pernet_init(net); nf_conntrack_proto_pernet_init(net); diff --git a/target/linux/generic/hack-5.4/953-net-patch-linux-kernel-to-support-shortcut-fe.patch b/target/linux/generic/hack-5.4/953-net-patch-linux-kernel-to-support-shortcut-fe.patch index d689517d9..57b402929 100644 --- a/target/linux/generic/hack-5.4/953-net-patch-linux-kernel-to-support-shortcut-fe.patch +++ b/target/linux/generic/hack-5.4/953-net-patch-linux-kernel-to-support-shortcut-fe.patch @@ -49,7 +49,7 @@ int (*fcn)(unsigned int events, struct nf_ct_event *item); --- a/net/bridge/br_if.c +++ b/net/bridge/br_if.c -@@ -761,6 +761,28 @@ void br_port_flags_change(struct net_bri +@@ -763,6 +763,28 @@ void br_port_flags_change(struct net_bri br_recalculate_neigh_suppress_enabled(br); } @@ -80,7 +80,7 @@ struct net_bridge_port *p; --- a/net/core/dev.c +++ b/net/core/dev.c -@@ -3189,9 +3189,17 @@ static int xmit_one(struct sk_buff *skb, +@@ -3197,9 +3197,17 @@ static int xmit_one(struct sk_buff *skb, unsigned int len; int rc; @@ -99,7 +99,7 @@ #ifdef CONFIG_ETHERNET_PACKET_MANGLE if (!dev->eth_mangle_tx || (skb = dev->eth_mangle_tx(dev, skb)) != NULL) -@@ -4702,6 +4710,11 @@ void netdev_rx_handler_unregister(struct +@@ -4714,6 +4722,11 @@ void netdev_rx_handler_unregister(struct } EXPORT_SYMBOL_GPL(netdev_rx_handler_unregister); @@ -111,7 +111,7 @@ /* * Limit the use of PFMEMALLOC reserves to those protocols that implement * the special handling of PFMEMALLOC skbs. -@@ -4752,6 +4765,10 @@ static int __netif_receive_skb_core(stru +@@ -4764,6 +4777,10 @@ static int __netif_receive_skb_core(stru int ret = NET_RX_DROP; __be16 type; @@ -122,7 +122,7 @@ net_timestamp_check(!netdev_tstamp_prequeue, skb); trace_netif_receive_skb(skb); -@@ -4791,6 +4808,16 @@ another_round: +@@ -4803,6 +4820,16 @@ another_round: goto out; } diff --git a/target/linux/generic/pending-5.4/746-net-phylink-re-split-__phylink_connect_phy.patch b/target/linux/generic/pending-5.4/746-net-phylink-re-split-__phylink_connect_phy.patch index b0b63761a..d547a18d6 100644 --- a/target/linux/generic/pending-5.4/746-net-phylink-re-split-__phylink_connect_phy.patch +++ b/target/linux/generic/pending-5.4/746-net-phylink-re-split-__phylink_connect_phy.patch @@ -47,7 +47,7 @@ Signed-off-by: Russell King } /** -@@ -803,13 +796,23 @@ static int __phylink_connect_phy(struct +@@ -806,13 +796,23 @@ static int __phylink_connect_phy(struct */ int phylink_connect_phy(struct phylink *pl, struct phy_device *phy) { diff --git a/target/linux/generic/pending-5.4/750-net-phylink-delay-MAC-configuration-for-copper-SFP-m.patch b/target/linux/generic/pending-5.4/750-net-phylink-delay-MAC-configuration-for-copper-SFP-m.patch index 9073e598a..667170a39 100644 --- a/target/linux/generic/pending-5.4/750-net-phylink-delay-MAC-configuration-for-copper-SFP-m.patch +++ b/target/linux/generic/pending-5.4/750-net-phylink-delay-MAC-configuration-for-copper-SFP-m.patch @@ -55,7 +55,7 @@ Signed-off-by: David S. Miller if (changed && !test_bit(PHYLINK_DISABLE_STOPPED, &pl->phylink_disable_state)) -@@ -1770,15 +1778,20 @@ static int phylink_sfp_module_insert(voi +@@ -1775,15 +1778,20 @@ static int phylink_sfp_module_insert(voi const struct sfp_eeprom_id *id) { struct phylink *pl = upstream; diff --git a/target/linux/ipq806x/patches-5.4/0060-HACK-arch-arm-force-ZRELADDR-on-arch-qcom.patch b/target/linux/ipq806x/patches-5.4/0060-HACK-arch-arm-force-ZRELADDR-on-arch-qcom.patch index d3b39ac3e..6d3e7d9ee 100644 --- a/target/linux/ipq806x/patches-5.4/0060-HACK-arch-arm-force-ZRELADDR-on-arch-qcom.patch +++ b/target/linux/ipq806x/patches-5.4/0060-HACK-arch-arm-force-ZRELADDR-on-arch-qcom.patch @@ -33,7 +33,7 @@ Signed-off-by: Mathieu Olivari --- a/arch/arm/Kconfig +++ b/arch/arm/Kconfig -@@ -318,7 +318,7 @@ config ARCH_MULTIPLATFORM +@@ -319,7 +319,7 @@ config ARCH_MULTIPLATFORM depends on MMU select ARM_HAS_SG_CHAIN select ARM_PATCH_PHYS_VIRT diff --git a/target/linux/ipq806x/patches-5.4/0067-generic-Mangle-bootloader-s-kernel-arguments.patch b/target/linux/ipq806x/patches-5.4/0067-generic-Mangle-bootloader-s-kernel-arguments.patch index 751ac10a1..33c77fb72 100644 --- a/target/linux/ipq806x/patches-5.4/0067-generic-Mangle-bootloader-s-kernel-arguments.patch +++ b/target/linux/ipq806x/patches-5.4/0067-generic-Mangle-bootloader-s-kernel-arguments.patch @@ -22,7 +22,7 @@ Signed-off-by: Adrian Panella --- a/arch/arm/Kconfig +++ b/arch/arm/Kconfig -@@ -1827,6 +1827,17 @@ config ARM_ATAG_DTB_COMPAT_CMDLINE_EXTEN +@@ -1828,6 +1828,17 @@ config ARM_ATAG_DTB_COMPAT_CMDLINE_EXTEN The command-line arguments provided by the boot loader will be appended to the the device tree bootargs property. diff --git a/target/linux/ipq806x/patches-5.4/900-arm-add-cmdline-override.patch b/target/linux/ipq806x/patches-5.4/900-arm-add-cmdline-override.patch index 49cd68b68..17f20f068 100644 --- a/target/linux/ipq806x/patches-5.4/900-arm-add-cmdline-override.patch +++ b/target/linux/ipq806x/patches-5.4/900-arm-add-cmdline-override.patch @@ -1,6 +1,6 @@ --- a/arch/arm/Kconfig +++ b/arch/arm/Kconfig -@@ -1840,6 +1840,14 @@ config ARM_ATAG_DTB_COMPAT_CMDLINE_MANGL +@@ -1841,6 +1841,14 @@ config ARM_ATAG_DTB_COMPAT_CMDLINE_MANGL endchoice diff --git a/target/linux/ipq806x/patches-5.4/990-00-Add-required-entries-in-dts-files-for-NSS-support.patch.patch b/target/linux/ipq806x/patches-5.4/990-00-Add-required-entries-in-dts-files-for-NSS-support.patch.patch index 83d4ecf44..3f90e0d61 100644 --- a/target/linux/ipq806x/patches-5.4/990-00-Add-required-entries-in-dts-files-for-NSS-support.patch.patch +++ b/target/linux/ipq806x/patches-5.4/990-00-Add-required-entries-in-dts-files-for-NSS-support.patch.patch @@ -1,6 +1,6 @@ --- b/arch/arm/boot/dts/qcom-ipq8064.dtsi +++ a/arch/arm/boot/dts/qcom-ipq8064.dtsi -@@ -1392,6 +1392,12 @@ +@@ -1456,6 +1456,12 @@ status = "disabled"; }; @@ -13,7 +13,7 @@ gmac0: ethernet@37000000 { device_type = "network"; compatible = "qcom,ipq806x-gmac"; -@@ -1492,7 +1498,132 @@ +@@ -1556,7 +1562,132 @@ regulator-always-on; }; @@ -147,7 +147,7 @@ compatible = "qcom,bam-v1.3.0"; reg = <0x12402000 0x8000>; interrupts = ; -@@ -1558,6 +1689,20 @@ +@@ -1622,6 +1753,20 @@ dma-names = "tx", "rx"; }; }; diff --git a/target/linux/ipq806x/patches-5.4/999-01-Revert-ARM-dma-mapping-remove-dmac_clean_range-and-d.patch b/target/linux/ipq806x/patches-5.4/999-01-Revert-ARM-dma-mapping-remove-dmac_clean_range-and-d.patch index 7e6d9b88e..03d97fadf 100644 --- a/target/linux/ipq806x/patches-5.4/999-01-Revert-ARM-dma-mapping-remove-dmac_clean_range-and-d.patch +++ b/target/linux/ipq806x/patches-5.4/999-01-Revert-ARM-dma-mapping-remove-dmac_clean_range-and-d.patch @@ -121,7 +121,7 @@ Signed-off-by: Robert Marko define_cache_functions b15 --- a/arch/arm/mm/proc-macros.S +++ b/arch/arm/mm/proc-macros.S -@@ -335,6 +335,8 @@ ENTRY(\name\()_cache_fns) +@@ -336,6 +336,8 @@ ENTRY(\name\()_cache_fns) .long \name\()_flush_kern_dcache_area .long \name\()_dma_map_area .long \name\()_dma_unmap_area diff --git a/target/linux/ipq806x/patches-5.4/999-03a-qca-nss-ecm-support.patch b/target/linux/ipq806x/patches-5.4/999-03a-qca-nss-ecm-support.patch index 0a0cb22d9..5e62e8f3c 100644 --- a/target/linux/ipq806x/patches-5.4/999-03a-qca-nss-ecm-support.patch +++ b/target/linux/ipq806x/patches-5.4/999-03a-qca-nss-ecm-support.patch @@ -1,6 +1,6 @@ --- a/include/linux/if_bridge.h +++ b/include/linux/if_bridge.h -@@ -148,4 +148,39 @@ br_port_flag_is_set(const struct net_dev +@@ -149,4 +149,39 @@ br_port_flag_is_set(const struct net_dev } #endif @@ -75,7 +75,7 @@ #endif --- a/include/linux/if_vlan.h +++ b/include/linux/if_vlan.h -@@ -220,7 +220,28 @@ extern void vlan_vids_del_by_dev(struct +@@ -222,7 +222,28 @@ extern void vlan_vids_del_by_dev(struct extern bool vlan_uses_dev(const struct net_device *dev); @@ -106,7 +106,7 @@ __be16 vlan_proto, u16 vlan_id) --- a/include/linux/netdevice.h +++ b/include/linux/netdevice.h -@@ -1581,6 +1581,20 @@ enum netdev_priv_flags { +@@ -1590,6 +1590,20 @@ enum netdev_priv_flags { #define IFF_LIVE_RENAME_OK IFF_LIVE_RENAME_OK #define IFF_NO_IP_ALIGN IFF_NO_IP_ALIGN @@ -127,7 +127,7 @@ /** * struct net_device - The DEVICE structure. * -@@ -1890,6 +1904,7 @@ struct net_device { +@@ -1900,6 +1914,7 @@ struct net_device { unsigned int flags; unsigned int priv_flags; @@ -135,7 +135,7 @@ unsigned short gflags; unsigned short padded; -@@ -2527,6 +2542,10 @@ enum netdev_cmd { +@@ -2583,6 +2598,10 @@ enum netdev_cmd { NETDEV_CVLAN_FILTER_DROP_INFO, NETDEV_SVLAN_FILTER_PUSH_INFO, NETDEV_SVLAN_FILTER_DROP_INFO, @@ -164,7 +164,7 @@ --- a/include/net/bonding.h +++ b/include/net/bonding.h -@@ -238,6 +238,7 @@ struct bonding { +@@ -243,6 +243,7 @@ struct bonding { #endif /* CONFIG_DEBUG_FS */ struct rtnl_link_stats64 bond_stats; struct lock_class_key stats_lock_key; @@ -172,7 +172,7 @@ }; #define bond_slave_get_rcu(dev) \ -@@ -749,4 +749,12 @@ static inline void bond_tx_drop(struct n +@@ -757,4 +758,12 @@ static inline void bond_tx_drop(struct n dev_kfree_skb_any(skb); } @@ -201,7 +201,7 @@ const struct dst_entry *dst = skb_dst(skb); --- a/include/net/neighbour.h +++ b/include/net/neighbour.h -@@ -568,4 +568,15 @@ static inline void neigh_update_is_route +@@ -575,4 +575,15 @@ static inline void neigh_update_is_route *notify = 1; } } @@ -352,7 +352,7 @@ break; case AD_MUX_COLLECTING_DISTRIBUTING: if (!(port->sm_vars & AD_PORT_SELECTED) || -@@ -1895,6 +1951,8 @@ static void ad_enable_collecting_distrib +@@ -1896,6 +1952,8 @@ static void ad_enable_collecting_distrib bool *update_slave_arr) { if (port->aggregator->is_active) { @@ -361,7 +361,7 @@ slave_dbg(port->slave->bond->dev, port->slave->dev, "Enabling port %d (LAG %d)\n", port->actor_port_number, -@@ -1902,6 +1960,16 @@ static void ad_enable_collecting_distrib +@@ -1903,6 +1961,16 @@ static void ad_enable_collecting_distrib __enable_port(port); /* Slave array needs update */ *update_slave_arr = true; @@ -378,7 +378,7 @@ } } -@@ -2759,3 +2827,101 @@ int bond_3ad_stats_fill(struct sk_buff * +@@ -2780,3 +2848,101 @@ int bond_3ad_stats_fill(struct sk_buff * return 0; } @@ -965,7 +965,7 @@ spin_unlock_bh(&br->hash_lock); } } -@@ -586,6 +623,12 @@ void br_fdb_update(struct net_bridge *br +@@ -587,6 +624,12 @@ void br_fdb_update(struct net_bridge *br /* Take over HW learned entry */ if (unlikely(fdb->added_by_external_learn)) fdb->added_by_external_learn = 0; @@ -978,7 +978,7 @@ } if (now != fdb->updated) fdb->updated = now; -@@ -695,6 +738,25 @@ static void fdb_notify(struct net_bridge +@@ -696,6 +739,25 @@ static void fdb_notify(struct net_bridge struct sk_buff *skb; int err = -ENOBUFS; @@ -1004,7 +1004,7 @@ if (swdev_notify) br_switchdev_fdb_notify(fdb, type); -@@ -1211,3 +1273,44 @@ void br_fdb_clear_offload(const struct n +@@ -1212,3 +1274,44 @@ void br_fdb_clear_offload(const struct n spin_unlock_bh(&p->br->hash_lock); } EXPORT_SYMBOL_GPL(br_fdb_clear_offload); @@ -1064,7 +1064,7 @@ /* * Determine initial path cost based on speed. * using recommendations from 802.1d standard -@@ -681,6 +687,8 @@ +@@ -695,6 +701,8 @@ kobject_uevent(&p->kobj, KOBJ_ADD); @@ -1073,7 +1073,7 @@ return 0; err7: -@@ -713,6 +721,8 @@ +@@ -730,6 +738,8 @@ p = br_port_get_rtnl(dev); if (!p || p->br != br) return -EINVAL; @@ -1082,7 +1082,7 @@ /* Since more than one interface can be attached to a bridge, * there still maybe an alternate path for netconsole to use; -@@ -768,6 +778,67 @@ +@@ -785,6 +795,67 @@ } EXPORT_SYMBOL_GPL(br_dev_update_stats); @@ -1153,7 +1153,7 @@ --- a/net/bridge/br_private.h +++ b/net/bridge/br_private.h -@@ -1258,4 +1258,9 @@ void br_do_proxy_suppress_arp(struct sk_ +@@ -1269,4 +1269,9 @@ void br_do_proxy_suppress_arp(struct sk_ void br_do_suppress_nd(struct sk_buff *skb, struct net_bridge *br, u16 vid, struct net_bridge_port *p, struct nd_msg *msg); struct nd_msg *br_is_nd_neigh_msg(struct sk_buff *skb, struct nd_msg *m); @@ -1165,7 +1165,7 @@ #endif --- a/net/core/neighbour.c +++ b/net/core/neighbour.c -@@ -1202,7 +1202,21 @@ static void neigh_update_hhs(struct neig +@@ -1208,7 +1208,21 @@ static void neigh_update_hhs(struct neig } } @@ -1187,7 +1187,7 @@ /* Generic update routine. -- lladdr is new lladdr or NULL, if it is not supplied. -@@ -1233,6 +1247,7 @@ static int __neigh_update(struct neighbo +@@ -1239,6 +1253,7 @@ static int __neigh_update(struct neighbo int notify = 0; struct net_device *dev; int update_isrouter = 0; @@ -1195,7 +1195,7 @@ trace_neigh_update(neigh, lladdr, new, flags, nlmsg_pid); -@@ -1259,6 +1259,8 @@ static int __neigh_update(struct neighbo +@@ -1248,6 +1263,8 @@ static int __neigh_update(struct neighbo old = neigh->nud_state; err = -EPERM; @@ -1204,7 +1204,7 @@ if (neigh->dead) { NL_SET_ERR_MSG(extack, "Neighbor entry is now dead"); new = old; -@@ -1277,6 +1294,11 @@ static int __neigh_update(struct neighbo +@@ -1290,6 +1307,11 @@ static int __neigh_update(struct neighbo - compare new & old - if they are different, check override flag */ @@ -1216,7 +1216,7 @@ if ((old & NUD_VALID) && !memcmp(lladdr, neigh->ha, dev->addr_len)) lladdr = neigh->ha; -@@ -1399,8 +1421,11 @@ out: +@@ -1412,8 +1434,11 @@ out: if (((new ^ old) & NUD_PERMANENT) || ext_learn_change) neigh_update_gc_list(neigh); @@ -1261,7 +1261,7 @@ fib_release_info(fa_to_delete->fa_info); alias_free_mem_rcu(fa_to_delete); return 0; -@@ -2219,6 +2228,20 @@ void __init fib_trie_init(void) +@@ -2220,6 +2229,20 @@ void __init fib_trie_init(void) 0, SLAB_PANIC, NULL); } @@ -1322,7 +1322,7 @@ + --- a/net/ipv6/ndisc.c +++ b/net/ipv6/ndisc.c -@@ -646,6 +646,7 @@ void ndisc_send_ns(struct net_device *de +@@ -648,6 +648,7 @@ void ndisc_send_ns(struct net_device *de ndisc_send_skb(skb, daddr, saddr); } @@ -1332,7 +1332,7 @@ const struct in6_addr *daddr) --- a/net/ipv6/route.c +++ b/net/ipv6/route.c -@@ -3747,6 +3747,9 @@ out: +@@ -3784,6 +3784,9 @@ out: return ERR_PTR(err); } @@ -1342,7 +1342,7 @@ int ip6_route_add(struct fib6_config *cfg, gfp_t gfp_flags, struct netlink_ext_ack *extack) { -@@ -3758,6 +3761,10 @@ int ip6_route_add(struct fib6_config *cf +@@ -3795,6 +3798,10 @@ int ip6_route_add(struct fib6_config *cf return PTR_ERR(rt); err = __ip6_ins_rt(rt, &cfg->fc_nlinfo, extack); @@ -1353,7 +1353,7 @@ fib6_info_release(rt); return err; -@@ -3779,6 +3786,9 @@ static int __ip6_del_rt(struct fib6_info +@@ -3816,6 +3823,9 @@ static int __ip6_del_rt(struct fib6_info err = fib6_del(rt, info); spin_unlock_bh(&table->tb6_lock); @@ -1363,7 +1363,7 @@ out: fib6_info_release(rt); return err; -@@ -6068,6 +6078,20 @@ static int ip6_route_dev_notify(struct n +@@ -6136,6 +6146,20 @@ static int ip6_route_dev_notify(struct n return NOTIFY_OK; } @@ -1559,7 +1559,7 @@ --- a/net/netfilter/Kconfig +++ b/net/netfilter/Kconfig -@@ -158,6 +158,13 @@ config NF_CONNTRACK_TIMEOUT +@@ -136,6 +136,13 @@ config NF_CONNTRACK_TIMEOUT If unsure, say `N'. diff --git a/target/linux/ipq806x/patches-5.4/999-03b-qca-nss-ecm-support.patch b/target/linux/ipq806x/patches-5.4/999-03b-qca-nss-ecm-support.patch index 3fe582c44..17bab2114 100644 --- a/target/linux/ipq806x/patches-5.4/999-03b-qca-nss-ecm-support.patch +++ b/target/linux/ipq806x/patches-5.4/999-03b-qca-nss-ecm-support.patch @@ -1,6 +1,6 @@ --- a/include/linux/if_bridge.h +++ b/include/linux/if_bridge.h -@@ -173,6 +173,8 @@ struct br_fdb_event { +@@ -174,6 +174,8 @@ struct br_fdb_event { struct net_device *dev; unsigned char addr[6]; unsigned char is_local; @@ -11,7 +11,7 @@ extern void br_fdb_unregister_notify(struct notifier_block *nb); --- a/include/linux/netdevice.h +++ b/include/linux/netdevice.h -@@ -1587,12 +1587,18 @@ enum netdev_priv_qca_ecm_flags { +@@ -1596,12 +1596,18 @@ enum netdev_priv_qca_ecm_flags { IFF_QCA_ECM_PPP_L2TPV2 = 1<<1, IFF_QCA_ECM_PPP_L2TPV3 = 1<<2, IFF_QCA_ECM_PPP_PPTP = 1<<3, @@ -82,7 +82,7 @@ #endif --- a/drivers/net/tun.c +++ b/drivers/net/tun.c -@@ -2833,6 +2833,8 @@ static int tun_set_iff(struct net *net, +@@ -2860,6 +2860,8 @@ static int tun_set_iff(struct net *net, ~(NETIF_F_HW_VLAN_CTAG_TX | NETIF_F_HW_VLAN_STAG_TX); @@ -93,7 +93,7 @@ --- a/net/ipv4/ip_gre.c +++ b/net/ipv4/ip_gre.c -@@ -1287,6 +1287,7 @@ static void ipgre_tap_setup(struct net_d +@@ -1300,6 +1300,7 @@ static void ipgre_tap_setup(struct net_d dev->netdev_ops = &gre_tap_netdev_ops; dev->priv_flags &= ~IFF_TX_SKB_SHARING; dev->priv_flags |= IFF_LIVE_ADDR_CHANGE; @@ -103,7 +103,7 @@ --- a/net/ipv6/ip6_gre.c +++ b/net/ipv6/ip6_gre.c -@@ -1895,6 +1895,7 @@ static void ip6gre_tap_setup(struct net_ +@@ -1911,6 +1911,7 @@ static void ip6gre_tap_setup(struct net_ dev->priv_flags &= ~IFF_TX_SKB_SHARING; dev->priv_flags |= IFF_LIVE_ADDR_CHANGE; @@ -113,7 +113,7 @@ --- a/include/linux/if_bridge.h +++ b/include/linux/if_bridge.h -@@ -68,6 +68,7 @@ extern void br_fdb_update_unregister_notify(struct notifier_block *nb); +@@ -54,6 +54,7 @@ extern void br_fdb_update_unregister_notify(struct notifier_block *nb); extern void brioctl_set(int (*ioctl_hook)(struct net *, unsigned int, void __user *)); extern void br_dev_update_stats(struct net_device *dev, struct rtnl_link_stats64 *nlstats); @@ -123,7 +123,7 @@ int br_multicast_list_adjacent(struct net_device *dev, --- a/net/bridge/br_if.c +++ b/net/bridge/br_if.c -@@ -684,6 +684,17 @@ void br_dev_update_stats(struct net_device *dev, +@@ -796,6 +796,17 @@ void br_dev_update_stats(struct net_device *dev, EXPORT_SYMBOL_GPL(br_dev_update_stats); /* QCA NSS ECM support - Start */ diff --git a/target/linux/ipq806x/patches-5.4/999-03c-qca-nss-pppoe-offload-support.patch b/target/linux/ipq806x/patches-5.4/999-03c-qca-nss-pppoe-offload-support.patch index 519953118..658257778 100644 --- a/target/linux/ipq806x/patches-5.4/999-03c-qca-nss-pppoe-offload-support.patch +++ b/target/linux/ipq806x/patches-5.4/999-03c-qca-nss-pppoe-offload-support.patch @@ -15,8 +15,6 @@ Signed-off-by: Murat Sezgin include/linux/ppp_channel.h | 38 +++++++++ 4 files changed, 317 insertions(+), 6 deletions(-) -diff --git a/drivers/net/ppp/ppp_generic.c b/drivers/net/ppp/ppp_generic.c -index 56af90b..58b889e 100644 --- a/drivers/net/ppp/ppp_generic.c +++ b/drivers/net/ppp/ppp_generic.c @@ -1,5 +1,21 @@ @@ -41,7 +39,7 @@ index 56af90b..58b889e 100644 * Generic PPP layer for Linux. * * Copyright 1999-2002 Paul Mackerras. -@@ -3341,6 +3357,178 @@ static void *unit_find(struct idr *p, int n) +@@ -3357,6 +3373,178 @@ static void *unit_find(struct idr *p, int n) return idr_find(p, n); } @@ -220,7 +218,7 @@ index 56af90b..58b889e 100644 /* Module/initialization stuff */ module_init(ppp_init); -@@ -3357,6 +3545,8 @@ EXPORT_SYMBOL(ppp_input_error); +@@ -3373,6 +3561,8 @@ EXPORT_SYMBOL(ppp_input_error); EXPORT_SYMBOL(ppp_output_wakeup); EXPORT_SYMBOL(ppp_register_compressor); EXPORT_SYMBOL(ppp_unregister_compressor); @@ -229,8 +227,6 @@ index 56af90b..58b889e 100644 MODULE_LICENSE("GPL"); MODULE_ALIAS_CHARDEV(PPP_MAJOR, 0); MODULE_ALIAS_RTNL_LINK("ppp"); -diff --git a/drivers/net/ppp/pppoe.c b/drivers/net/ppp/pppoe.c -index df5d418..23590dd 100644 --- a/drivers/net/ppp/pppoe.c +++ b/drivers/net/ppp/pppoe.c @@ -62,6 +62,7 @@ @@ -250,7 +246,7 @@ index df5d418..23590dd 100644 /* per-net private data for this module */ static unsigned int pppoe_net_id __read_mostly; -@@ -649,6 +650,7 @@ static int pppoe_connect(struct socket *sock, struct sockaddr *uservaddr, +@@ -652,6 +653,7 @@ static int pppoe_connect(struct socket *sock, struct sockaddr *uservaddr, if (stage_session(po->pppoe_pa.sid)) { pppox_unbind_sock(sk); pn = pppoe_pernet(sock_net(sk)); @@ -258,7 +254,7 @@ index df5d418..23590dd 100644 delete_item(pn, po->pppoe_pa.sid, po->pppoe_pa.remote, po->pppoe_ifindex); if (po->pppoe_dev) { -@@ -696,7 +698,7 @@ static int pppoe_connect(struct socket *sock, struct sockaddr *uservaddr, +@@ -699,7 +701,7 @@ static int pppoe_connect(struct socket *sock, struct sockaddr *uservaddr, po->chan.mtu = dev->mtu - sizeof(struct pppoe_hdr) - 2; po->chan.private = sk; @@ -267,7 +263,7 @@ index df5d418..23590dd 100644 error = ppp_register_net_channel(dev_net(dev), &po->chan); if (error) { -@@ -1001,11 +1003,78 @@ static int pppoe_flow_offload_check(struct ppp_channel *chan, +@@ -1004,11 +1006,78 @@ static int pppoe_flow_offload_check(struct ppp_channel *chan, } #endif /* CONFIG_NF_FLOW_TABLE */ @@ -349,8 +345,6 @@ index df5d418..23590dd 100644 }; static int pppoe_recvmsg(struct socket *sock, struct msghdr *m, -diff --git a/include/linux/if_pppox.h b/include/linux/if_pppox.h -index 69e813b..98131ea 100644 --- a/include/linux/if_pppox.h +++ b/include/linux/if_pppox.h @@ -1,13 +1,14 @@ @@ -387,8 +381,6 @@ index 69e813b..98131ea 100644 + struct pppoe_opt *addressing); + #endif /* !(__LINUX_IF_PPPOX_H) */ -diff --git a/include/linux/ppp_channel.h b/include/linux/ppp_channel.h -index 326a6fa..db352ff 100644 --- a/include/linux/ppp_channel.h +++ b/include/linux/ppp_channel.h @@ -32,6 +32,14 @@ struct ppp_channel_ops { @@ -443,5 +435,3 @@ index 326a6fa..db352ff 100644 /* Called by the channel when it can send some more data. */ extern void ppp_output_wakeup(struct ppp_channel *); --- -cgit v1.1 diff --git a/target/linux/ipq806x/patches-5.4/999-03d-qca-nss-pppoe-offload-support.patch b/target/linux/ipq806x/patches-5.4/999-03d-qca-nss-pppoe-offload-support.patch index c086e1d75..7e99f092e 100644 --- a/target/linux/ipq806x/patches-5.4/999-03d-qca-nss-pppoe-offload-support.patch +++ b/target/linux/ipq806x/patches-5.4/999-03d-qca-nss-pppoe-offload-support.patch @@ -16,11 +16,9 @@ Signed-off-by: Murat Sezgin net/l2tp/l2tp_core.h | 2 ++ 4 files changed, 36 insertions(+), 2 deletions(-) -diff --git a/drivers/net/ppp/ppp_generic.c b/drivers/net/ppp/ppp_generic.c -index 58b889e..9cf7fe3 100644 --- a/drivers/net/ppp/ppp_generic.c +++ b/drivers/net/ppp/ppp_generic.c -@@ -3360,7 +3360,9 @@ static void *unit_find(struct idr *p, int n) +@@ -3376,7 +3376,9 @@ static void *unit_find(struct idr *p, int n) /* Updates the PPP interface statistics. */ void ppp_update_stats(struct net_device *dev, unsigned long rx_packets, unsigned long rx_bytes, unsigned long tx_packets, @@ -31,7 +29,7 @@ index 58b889e..9cf7fe3 100644 { struct ppp *ppp; -@@ -3375,11 +3377,15 @@ void ppp_update_stats(struct net_device *dev, unsigned long rx_packets, +@@ -3391,11 +3393,15 @@ void ppp_update_stats(struct net_device *dev, unsigned long rx_packets, ppp_xmit_lock(ppp); ppp->stats64.tx_packets += tx_packets; ppp->stats64.tx_bytes += tx_bytes; @@ -47,8 +45,6 @@ index 58b889e..9cf7fe3 100644 ppp_recv_unlock(ppp); } -diff --git a/include/linux/ppp_channel.h b/include/linux/ppp_channel.h -index db352ff..82d51537 100644 --- a/include/linux/ppp_channel.h +++ b/include/linux/ppp_channel.h @@ -82,7 +82,9 @@ extern int ppp_is_multilink(struct net_device *dev); @@ -62,8 +58,6 @@ index db352ff..82d51537 100644 /* Called by the channel when it can send some more data. */ extern void ppp_output_wakeup(struct ppp_channel *); -diff --git a/net/l2tp/l2tp_core.c b/net/l2tp/l2tp_core.c -index 425b95e..b098099 100644 --- a/net/l2tp/l2tp_core.c +++ b/net/l2tp/l2tp_core.c @@ -355,6 +355,30 @@ err_tlock: @@ -97,8 +91,6 @@ index 425b95e..b098099 100644 /***************************************************************************** * Receive data handling *****************************************************************************/ -diff --git a/net/l2tp/l2tp_core.h b/net/l2tp/l2tp_core.h -index 2db3d50..5cc42a4 100644 --- a/net/l2tp/l2tp_core.h +++ b/net/l2tp/l2tp_core.h @@ -200,6 +200,8 @@ struct l2tp_session *l2tp_session_get(const struct net *net, u32 session_id); @@ -110,6 +102,3 @@ index 2db3d50..5cc42a4 100644 int l2tp_tunnel_create(struct net *net, int fd, int version, u32 tunnel_id, u32 peer_tunnel_id, struct l2tp_tunnel_cfg *cfg, --- -cgit v1.1 - diff --git a/target/linux/ipq806x/patches-5.4/999-03e-qca-nss-pppoe-offload-support.patch b/target/linux/ipq806x/patches-5.4/999-03e-qca-nss-pppoe-offload-support.patch index 09b931119..b6f71e38f 100644 --- a/target/linux/ipq806x/patches-5.4/999-03e-qca-nss-pppoe-offload-support.patch +++ b/target/linux/ipq806x/patches-5.4/999-03e-qca-nss-pppoe-offload-support.patch @@ -12,11 +12,9 @@ Signed-off-by: Murat Sezgin drivers/net/ppp/ppp_generic.c | 4 ++++ 1 file changed, 4 insertions(+) -diff --git a/drivers/net/ppp/ppp_generic.c b/drivers/net/ppp/ppp_generic.c -index 9cf7fe3..b7bab8e 100644 --- a/drivers/net/ppp/ppp_generic.c +++ b/drivers/net/ppp/ppp_generic.c -@@ -3379,6 +3379,8 @@ void ppp_update_stats(struct net_device *dev, unsigned long rx_packets, +@@ -3395,6 +3395,8 @@ void ppp_update_stats(struct net_device *dev, unsigned long rx_packets, ppp->stats64.tx_bytes += tx_bytes; ppp->dev->stats.tx_errors += tx_errors; ppp->dev->stats.tx_dropped += tx_dropped; @@ -25,7 +23,7 @@ index 9cf7fe3..b7bab8e 100644 ppp_xmit_unlock(ppp); ppp_recv_lock(ppp); -@@ -3386,6 +3388,8 @@ void ppp_update_stats(struct net_device *dev, unsigned long rx_packets, +@@ -3402,6 +3404,8 @@ void ppp_update_stats(struct net_device *dev, unsigned long rx_packets, ppp->stats64.rx_bytes += rx_bytes; ppp->dev->stats.rx_errors += rx_errors; ppp->dev->stats.rx_dropped += rx_dropped; @@ -34,5 +32,3 @@ index 9cf7fe3..b7bab8e 100644 ppp_recv_unlock(ppp); } --- -cgit v1.1 diff --git a/target/linux/ipq806x/patches-5.4/999-04-qca-nss-cfi-support.patch b/target/linux/ipq806x/patches-5.4/999-04-qca-nss-cfi-support.patch index 1a9215f38..d2f307cec 100644 --- a/target/linux/ipq806x/patches-5.4/999-04-qca-nss-cfi-support.patch +++ b/target/linux/ipq806x/patches-5.4/999-04-qca-nss-cfi-support.patch @@ -68,7 +68,7 @@ --- a/net/ipv6/esp6.c +++ b/net/ipv6/esp6.c -@@ -429,6 +429,7 @@ static int esp6_output(struct xfrm_state *x, struct sk_buff *skb) +@@ -424,6 +424,7 @@ static int esp6_output(struct xfrm_state *x, struct sk_buff *skb) struct ip_esp_hdr *esph; struct crypto_aead *aead; struct esp_info esp; @@ -76,7 +76,7 @@ esp.inplace = true; -@@ -440,6 +441,11 @@ static int esp6_output(struct xfrm_state *x, struct sk_buff *skb) +@@ -435,6 +436,11 @@ static int esp6_output(struct xfrm_state *x, struct sk_buff *skb) aead = x->data; alen = crypto_aead_authsize(aead); @@ -88,7 +88,7 @@ esp.tfclen = 0; if (x->tfcpad) { struct xfrm_dst *dst = (struct xfrm_dst *)skb_dst(skb); -@@ -603,6 +609,7 @@ static int esp6_input(struct xfrm_state *x, struct sk_buff *skb) +@@ -598,6 +604,7 @@ static int esp6_input(struct xfrm_state *x, struct sk_buff *skb) __be32 *seqhi; u8 *iv; struct scatterlist *sg; @@ -96,7 +96,7 @@ if (!pskb_may_pull(skb, sizeof(struct ip_esp_hdr) + ivlen)) { ret = -EINVAL; -@@ -614,6 +621,12 @@ static int esp6_input(struct xfrm_state *x, struct sk_buff *skb) +@@ -609,6 +616,12 @@ static int esp6_input(struct xfrm_state *x, struct sk_buff *skb) goto out; } diff --git a/target/linux/ipq806x/patches-5.4/999-07b-qca-nss-clients-qdisc-support.patch b/target/linux/ipq806x/patches-5.4/999-07b-qca-nss-clients-qdisc-support.patch index 13a8588ad..c3b33f214 100644 --- a/target/linux/ipq806x/patches-5.4/999-07b-qca-nss-clients-qdisc-support.patch +++ b/target/linux/ipq806x/patches-5.4/999-07b-qca-nss-clients-qdisc-support.patch @@ -1,6 +1,6 @@ --- a/include/net/sch_generic.h +++ b/include/net/sch_generic.h -@@ -79,6 +79,7 @@ struct Qdisc { +@@ -80,6 +80,7 @@ struct Qdisc { #define TCQ_F_INVISIBLE 0x80 /* invisible by default in dump */ #define TCQ_F_NOLOCK 0x100 /* qdisc does not require locking */ #define TCQ_F_OFFLOADED 0x200 /* qdisc is offloaded to HW */ @@ -8,7 +8,7 @@ u32 limit; const struct Qdisc_ops *ops; struct qdisc_size_table __rcu *stab; -@@ -1295,4 +1296,9 @@ static inline void skb_tc_reinsert(struc +@@ -1349,4 +1350,9 @@ static inline void skb_tc_reinsert(struc qstats_overlimit_inc(res->qstats); } @@ -20,7 +20,7 @@ #endif --- a/include/uapi/linux/pkt_sched.h +++ b/include/uapi/linux/pkt_sched.h -@@ -1181,4 +1181,248 @@ enum { +@@ -1183,4 +1183,248 @@ enum { #define TCA_TAPRIO_ATTR_MAX (__TCA_TAPRIO_ATTR_MAX - 1) @@ -271,7 +271,7 @@ #endif --- a/net/sched/sch_api.c +++ b/net/sched/sch_api.c -@@ -2290,4 +2290,26 @@ static int __init pktsched_init(void) +@@ -2297,4 +2297,26 @@ static int __init pktsched_init(void) return 0; } @@ -300,7 +300,7 @@ subsys_initcall(pktsched_init); --- a/net/sched/sch_generic.c +++ b/net/sched/sch_generic.c -@@ -741,7 +741,7 @@ static void qdisc_free_cb(struct rcu_hea +@@ -767,7 +767,7 @@ static void qdisc_free_cb(struct rcu_hea qdisc_free(q); } @@ -309,7 +309,7 @@ { const struct Qdisc_ops *ops = qdisc->ops; struct sk_buff *skb, *tmp; -@@ -772,6 +772,7 @@ static void qdisc_destroy(struct Qdisc * +@@ -798,6 +798,7 @@ static void qdisc_destroy(struct Qdisc * call_rcu(&qdisc->rcu, qdisc_free_cb); } diff --git a/target/linux/ipq806x/patches-5.4/999-07c-qca-nss-clients-ppp-support.patch b/target/linux/ipq806x/patches-5.4/999-07c-qca-nss-clients-ppp-support.patch index 3fd3ce297..0382fcd95 100644 --- a/target/linux/ipq806x/patches-5.4/999-07c-qca-nss-clients-ppp-support.patch +++ b/target/linux/ipq806x/patches-5.4/999-07c-qca-nss-clients-ppp-support.patch @@ -1,6 +1,6 @@ --- a/drivers/net/ppp/ppp_generic.c +++ b/drivers/net/ppp/ppp_generic.c -@@ -48,6 +48,7 @@ +@@ -64,6 +64,7 @@ #include #include #include @@ -8,7 +8,7 @@ #include #include -@@ -3207,6 +3208,10 @@ ppp_connect_channel(struct channel *pch, +@@ -3239,6 +3240,10 @@ ppp_connect_channel(struct channel *pch, struct ppp_net *pn; int ret = -ENXIO; int hdrlen; @@ -19,7 +19,7 @@ pn = ppp_pernet(pch->chan_net); -@@ -3238,6 +3243,26 @@ ppp_connect_channel(struct channel *pch, +@@ -3270,6 +3275,26 @@ ppp_connect_channel(struct channel *pch, ++ppp->n_channels; pch->ppp = ppp; refcount_inc(&ppp->file.refcnt); @@ -46,7 +46,7 @@ ppp_unlock(ppp); ret = 0; -@@ -3341,6 +3366,56 @@ +@@ -3555,6 +3580,56 @@ } EXPORT_SYMBOL(ppp_release_channels); @@ -105,16 +105,16 @@ module_init(ppp_init); --- a/include/linux/ppp_channel.h +++ b/include/linux/ppp_channel.h -@@ -32,6 +32,8 @@ struct ppp_channel_ops { +@@ -36,6 +36,8 @@ struct ppp_channel_ops { * the channel subtype */ int (*get_channel_protocol)(struct ppp_channel *); + /* Get channel protocol version */ + int (*get_channel_protocol_ver)(struct ppp_channel *); - /* Hold the channel from being destroyed */ - void (*hold)(struct ppp_channel *); - /* Release hold on the channel */ -@@ -84,6 +96,15 @@ + /* Hold the channel from being destroyed */ + void (*hold)(struct ppp_channel *); + /* Release hold on the channel */ +@@ -69,6 +71,15 @@ /* Test if ppp xmit lock is locked */ extern bool ppp_is_xmit_locked(struct net_device *dev); diff --git a/target/linux/ipq806x/patches-5.4/999-07d-qca-nss-clients-ppp-support.patch b/target/linux/ipq806x/patches-5.4/999-07d-qca-nss-clients-ppp-support.patch index 5c743902f..f80d06bf8 100644 --- a/target/linux/ipq806x/patches-5.4/999-07d-qca-nss-clients-ppp-support.patch +++ b/target/linux/ipq806x/patches-5.4/999-07d-qca-nss-clients-ppp-support.patch @@ -1,6 +1,6 @@ --- a/include/linux/ppp_channel.h +++ b/include/linux/ppp_channel.h -@@ -146,5 +146,17 @@ extern void ppp_update_stats(struct net_ +@@ -135,5 +135,17 @@ extern void ppp_update_stats(struct net_ extern int ppp_dev_index(struct ppp_channel *); /* QCA NSS ECM Support - End */ @@ -20,7 +20,7 @@ #endif --- a/drivers/net/ppp/ppp_generic.c +++ b/drivers/net/ppp/ppp_generic.c -@@ -256,6 +256,26 @@ struct ppp_net { +@@ -274,6 +274,26 @@ struct ppp_net { #define seq_before(a, b) ((s32)((a) - (b)) < 0) #define seq_after(a, b) ((s32)((a) - (b)) > 0) @@ -47,7 +47,7 @@ /* Prototypes. */ static int ppp_unattached_ioctl(struct net *net, struct ppp_file *pf, struct file *file, unsigned int cmd, unsigned long arg); -@@ -3212,6 +3232,7 @@ ppp_connect_channel(struct channel *pch, +@@ -3244,6 +3264,7 @@ ppp_connect_channel(struct channel *pch, int ppp_proto; int version; /* QCA NSS ECM Support - End */ @@ -55,7 +55,7 @@ pn = ppp_pernet(pch->chan_net); -@@ -3262,6 +3283,8 @@ ppp_connect_channel(struct channel *pch, +@@ -3294,6 +3315,8 @@ ppp_connect_channel(struct channel *pch, ppp->dev->priv_flags_qca_ecm |= IFF_QCA_ECM_PPP_L2TPV3; } /* QCA NSS ECM support - End */ @@ -64,7 +64,7 @@ out2: ppp_unlock(ppp); ret = 0; -@@ -3270,6 +3293,16 @@ ppp_connect_channel(struct channel *pch, +@@ -3302,6 +3325,16 @@ ppp_connect_channel(struct channel *pch, write_unlock_bh(&pch->upl); out: mutex_unlock(&pn->all_ppp_mutex); @@ -81,7 +81,7 @@ return ret; } -@@ -3287,6 +3320,15 @@ ppp_disconnect_channel(struct channel *p +@@ -3319,6 +3352,15 @@ ppp_disconnect_channel(struct channel *p pch->ppp = NULL; write_unlock_bh(&pch->upl); if (ppp) { diff --git a/target/linux/ipq806x/patches-5.4/999-07e-qca-nss-clients-iptunnel-support.patch b/target/linux/ipq806x/patches-5.4/999-07e-qca-nss-clients-iptunnel-support.patch index 7422ba419..5996c9cdf 100644 --- a/target/linux/ipq806x/patches-5.4/999-07e-qca-nss-clients-iptunnel-support.patch +++ b/target/linux/ipq806x/patches-5.4/999-07e-qca-nss-clients-iptunnel-support.patch @@ -10,7 +10,7 @@ __u32 flags; /* tunnel flags */ --- a/include/net/ip_tunnels.h +++ b/include/net/ip_tunnels.h -@@ -525,4 +525,9 @@ static inline void ip_tunnel_info_opts_s +@@ -529,4 +529,9 @@ static inline void ip_tunnel_info_opts_s #endif /* CONFIG_INET */ @@ -22,7 +22,7 @@ #endif /* __NET_IP_TUNNELS_H */ --- a/net/ipv6/ip6_tunnel.c +++ b/net/ipv6/ip6_tunnel.c -@@ -2392,6 +2392,26 @@ nla_put_failure: +@@ -2399,6 +2399,26 @@ nla_put_failure: return -EMSGSIZE; } @@ -51,7 +51,7 @@ struct ip6_tnl *tunnel = netdev_priv(dev); --- a/net/ipv6/sit.c +++ b/net/ipv6/sit.c -@@ -1741,6 +1741,23 @@ nla_put_failure: +@@ -1739,6 +1739,23 @@ nla_put_failure: return -EMSGSIZE; } diff --git a/target/linux/ipq806x/patches-5.4/999-08-qca-mcs-support.patch b/target/linux/ipq806x/patches-5.4/999-08-qca-mcs-support.patch index 0d4d22019..9434af3d4 100644 --- a/target/linux/ipq806x/patches-5.4/999-08-qca-mcs-support.patch +++ b/target/linux/ipq806x/patches-5.4/999-08-qca-mcs-support.patch @@ -1,6 +1,6 @@ --- a/include/linux/if_bridge.h +++ b/include/linux/if_bridge.h -@@ -186,4 +186,17 @@ typedef struct net_bridge_port *br_get_d +@@ -187,4 +187,17 @@ typedef struct net_bridge_port *br_get_d extern br_get_dst_hook_t __rcu *br_get_dst_hook; /* QCA NSS ECM support - End */ @@ -88,7 +88,7 @@ MODULE_LICENSE("GPL"); --- a/net/bridge/br_device.c +++ b/net/bridge/br_device.c -@@ -87,6 +87,12 @@ netdev_tx_t br_dev_xmit(struct sk_buff * +@@ -85,6 +85,12 @@ netdev_tx_t br_dev_xmit(struct sk_buff * if (is_broadcast_ether_addr(dest)) { br_flood(br, skb, BR_PKT_BROADCAST, false, true); } else if (is_multicast_ether_addr(dest)) { @@ -544,7 +544,7 @@ static const struct fib_rules_ops __net_initconst ipmr_rules_ops_template = { .family = RTNL_FAMILY_IPMR, .rule_size = sizeof(struct ipmr_rule), -@@ -1208,6 +1439,11 @@ static int ipmr_mfc_delete(struct mr_tab +@@ -1210,6 +1441,11 @@ static int ipmr_mfc_delete(struct mr_tab mroute_netlink_event(mrt, c, RTM_DELROUTE); mr_cache_put(&c->_c); @@ -556,7 +556,7 @@ return 0; } -@@ -1237,6 +1473,12 @@ static int ipmr_mfc_add(struct net *net, +@@ -1239,6 +1475,12 @@ static int ipmr_mfc_add(struct net *net, call_ipmr_mfc_entry_notifiers(net, FIB_EVENT_ENTRY_REPLACE, c, mrt->id); mroute_netlink_event(mrt, c, RTM_NEWROUTE); @@ -569,7 +569,7 @@ return 0; } -@@ -1297,6 +1539,7 @@ static void mroute_clean_tables(struct m +@@ -1299,6 +1541,7 @@ static void mroute_clean_tables(struct m struct net *net = read_pnet(&mrt->net); struct mr_mfc *c, *tmp; struct mfc_cache *cache; @@ -577,7 +577,7 @@ LIST_HEAD(list); int i; -@@ -1321,10 +1564,19 @@ static void mroute_clean_tables(struct m +@@ -1323,10 +1566,19 @@ static void mroute_clean_tables(struct m rhltable_remove(&mrt->mfc_hash, &c->mnode, ipmr_rht_params); list_del_rcu(&c->list); cache = (struct mfc_cache *)c; @@ -617,7 +617,7 @@ #ifdef CONFIG_IPV6_MROUTE_MULTIPLE_TABLES #define ip6mr_for_each_table(mrt, net) \ list_for_each_entry_rcu(mrt, &net->ipv6.mr6_tables, list) -@@ -374,6 +385,227 @@ static struct mr_table_ops ip6mr_mr_tabl +@@ -376,6 +387,227 @@ static struct mr_table_ops ip6mr_mr_tabl .cmparg_any = &ip6mr_mr_table_ops_cmparg_any, }; @@ -845,7 +845,7 @@ static struct mr_table *ip6mr_new_table(struct net *net, u32 id) { struct mr_table *mrt; -@@ -1210,6 +1442,7 @@ static int ip6mr_mfc_delete(struct mr_ta +@@ -1212,6 +1444,7 @@ static int ip6mr_mfc_delete(struct mr_ta int parent) { struct mfc6_cache *c; @@ -853,7 +853,7 @@ /* The entries are added/deleted only under RTNL */ rcu_read_lock(); -@@ -1218,6 +1451,12 @@ static int ip6mr_mfc_delete(struct mr_ta +@@ -1220,6 +1453,12 @@ static int ip6mr_mfc_delete(struct mr_ta rcu_read_unlock(); if (!c) return -ENOENT; @@ -866,7 +866,7 @@ rhltable_remove(&mrt->mfc_hash, &c->_c.mnode, ip6mr_rht_params); list_del_rcu(&c->_c.list); -@@ -1225,6 +1464,12 @@ static int ip6mr_mfc_delete(struct mr_ta +@@ -1227,6 +1466,12 @@ static int ip6mr_mfc_delete(struct mr_ta FIB_EVENT_ENTRY_DEL, c, mrt->id); mr6_netlink_event(mrt, c, RTM_DELROUTE); mr_cache_put(&c->_c); @@ -879,7 +879,7 @@ return 0; } -@@ -1433,6 +1678,12 @@ static int ip6mr_mfc_add(struct net *net +@@ -1435,6 +1680,12 @@ static int ip6mr_mfc_add(struct net *net call_ip6mr_mfc_entry_notifiers(net, FIB_EVENT_ENTRY_REPLACE, c, mrt->id); mr6_netlink_event(mrt, c, RTM_NEWROUTE); @@ -892,7 +892,7 @@ return 0; } -@@ -1495,6 +1746,10 @@ static int ip6mr_mfc_add(struct net *net +@@ -1497,6 +1748,10 @@ static int ip6mr_mfc_add(struct net *net static void mroute_clean_tables(struct mr_table *mrt, int flags) { @@ -903,7 +903,7 @@ struct mr_mfc *c, *tmp; LIST_HEAD(list); int i; -@@ -1517,13 +1772,23 @@ static void mroute_clean_tables(struct m +@@ -1519,13 +1774,23 @@ static void mroute_clean_tables(struct m if (((c->mfc_flags & MFC_STATIC) && !(flags & MRT6_FLUSH_MFC_STATIC)) || (!(c->mfc_flags & MFC_STATIC) && !(flags & MRT6_FLUSH_MFC))) continue;