kernel: bump all to latest HEAD

This commit is contained in:
coolsnowwolf 2025-09-06 17:08:52 +08:00
parent 6e98a86bb5
commit df34fd611a
10 changed files with 83 additions and 174 deletions

View File

@ -1,2 +1,2 @@
LINUX_VERSION-5.10 = .241 LINUX_VERSION-5.10 = .242
LINUX_KERNEL_HASH-5.10.241 = 08c1e982064c81f8445a8fff2293d430c716c11fd3185606b8275718d696d8d6 LINUX_KERNEL_HASH-5.10.242 = bc3ae7003174e26c9a39534cfb8d66cee1a0ba6e1dd0381a9fe092f9de6ba9cd

View File

@ -1,2 +1,2 @@
LINUX_VERSION-5.15 = .190 LINUX_VERSION-5.15 = .191
LINUX_KERNEL_HASH-5.15.190 = 62b814f1a48e1d67764a28611f23ca1f1ce1084ad7f1d319acc05720a9a68604 LINUX_KERNEL_HASH-5.15.191 = 7a2db3ac34a3edb6f497204cc287497c29bb3218fdb7876951f8bceac46e924e

View File

@ -1,2 +1,2 @@
LINUX_VERSION-5.4 = .297 LINUX_VERSION-5.4 = .298
LINUX_KERNEL_HASH-5.4.297 = f10cfcea7acf7588087d7cc17ebeeb7d3ff783c040536698c544eed7c5e8a841 LINUX_KERNEL_HASH-5.4.298 = 01163bed1abadc1e5e6480f0d694c360281cbff3446023c2e015f1e24504e4e6

View File

@ -1,2 +1,2 @@
LINUX_VERSION-6.1 = .149 LINUX_VERSION-6.1 = .150
LINUX_KERNEL_HASH-6.1.149 = c4e906b8d39a5866d25e06371d4de4454fbfaaeb67979a04e4137e807877be39 LINUX_KERNEL_HASH-6.1.150 = 001bffcc08e2b544fb507c0588f9270f8b5b1138508a4be1205492e3c57824ef

View File

@ -1,2 +1,2 @@
LINUX_VERSION-6.12 = .44 LINUX_VERSION-6.12 = .45
LINUX_KERNEL_HASH-6.12.44 = b650210ed3027b224969d148aa377452a9aad3ae7f2851abedd31adfef16bdae LINUX_KERNEL_HASH-6.12.45 = 8f95a8549cfbdfb89c1181a1f55a971f04dfcd629508a2ed70b777ab92f9db3e

View File

@ -1,2 +1,2 @@
LINUX_VERSION-6.6 = .103 LINUX_VERSION-6.6 = .104
LINUX_KERNEL_HASH-6.6.103 = d288dd38c3e62ba576ba6b3ad2a84cfba65cd43b702f6c50d1f701aee942b18e LINUX_KERNEL_HASH-6.6.104 = 2a772f9d661afabaaddcdfd1116239acb2d943377aceab9e0baed2b7a915e36a

View File

@ -1,47 +0,0 @@
From 5189446ba995556eaa3755a6e875bc06675b88bd Mon Sep 17 00:00:00 2001
From: Oscar Maes <oscmaes92@gmail.com>
Date: Wed, 27 Aug 2025 08:23:21 +0200
Subject: [PATCH] net: ipv4: fix regression in local-broadcast routes
Commit 9e30ecf23b1b ("net: ipv4: fix incorrect MTU in broadcast routes")
introduced a regression where local-broadcast packets would have their
gateway set in __mkroute_output, which was caused by fi = NULL being
removed.
Fix this by resetting the fib_info for local-broadcast packets. This
preserves the intended changes for directed-broadcast packets.
Cc: stable@vger.kernel.org
Fixes: 9e30ecf23b1b ("net: ipv4: fix incorrect MTU in broadcast routes")
Reported-by: Brett A C Sheffield <bacs@librecast.net>
Closes: https://lore.kernel.org/regressions/20250822165231.4353-4-bacs@librecast.net
Signed-off-by: Oscar Maes <oscmaes92@gmail.com>
Reviewed-by: David Ahern <dsahern@kernel.org>
Link: https://patch.msgid.link/20250827062322.4807-1-oscmaes92@gmail.com
Signed-off-by: Paolo Abeni <pabeni@redhat.com>
---
net/ipv4/route.c | 10 +++++++---
1 file changed, 7 insertions(+), 3 deletions(-)
--- a/net/ipv4/route.c
+++ b/net/ipv4/route.c
@@ -2532,12 +2532,16 @@ static struct rtable *__mkroute_output(c
!netif_is_l3_master(dev_out))
return ERR_PTR(-EINVAL);
- if (ipv4_is_lbcast(fl4->daddr))
+ if (ipv4_is_lbcast(fl4->daddr)) {
type = RTN_BROADCAST;
- else if (ipv4_is_multicast(fl4->daddr))
+
+ /* reset fi to prevent gateway resolution */
+ fi = NULL;
+ } else if (ipv4_is_multicast(fl4->daddr)) {
type = RTN_MULTICAST;
- else if (ipv4_is_zeronet(fl4->daddr))
+ } else if (ipv4_is_zeronet(fl4->daddr)) {
return ERR_PTR(-EINVAL);
+ }
if (dev_out->flags & IFF_LOOPBACK)
flags |= RTCF_LOCAL;

View File

@ -1,47 +0,0 @@
From 5189446ba995556eaa3755a6e875bc06675b88bd Mon Sep 17 00:00:00 2001
From: Oscar Maes <oscmaes92@gmail.com>
Date: Wed, 27 Aug 2025 08:23:21 +0200
Subject: [PATCH] net: ipv4: fix regression in local-broadcast routes
Commit 9e30ecf23b1b ("net: ipv4: fix incorrect MTU in broadcast routes")
introduced a regression where local-broadcast packets would have their
gateway set in __mkroute_output, which was caused by fi = NULL being
removed.
Fix this by resetting the fib_info for local-broadcast packets. This
preserves the intended changes for directed-broadcast packets.
Cc: stable@vger.kernel.org
Fixes: 9e30ecf23b1b ("net: ipv4: fix incorrect MTU in broadcast routes")
Reported-by: Brett A C Sheffield <bacs@librecast.net>
Closes: https://lore.kernel.org/regressions/20250822165231.4353-4-bacs@librecast.net
Signed-off-by: Oscar Maes <oscmaes92@gmail.com>
Reviewed-by: David Ahern <dsahern@kernel.org>
Link: https://patch.msgid.link/20250827062322.4807-1-oscmaes92@gmail.com
Signed-off-by: Paolo Abeni <pabeni@redhat.com>
---
net/ipv4/route.c | 10 +++++++---
1 file changed, 7 insertions(+), 3 deletions(-)
--- a/net/ipv4/route.c
+++ b/net/ipv4/route.c
@@ -2547,12 +2547,16 @@ static struct rtable *__mkroute_output(c
!netif_is_l3_master(dev_out))
return ERR_PTR(-EINVAL);
- if (ipv4_is_lbcast(fl4->daddr))
+ if (ipv4_is_lbcast(fl4->daddr)) {
type = RTN_BROADCAST;
- else if (ipv4_is_multicast(fl4->daddr))
+
+ /* reset fi to prevent gateway resolution */
+ fi = NULL;
+ } else if (ipv4_is_multicast(fl4->daddr)) {
type = RTN_MULTICAST;
- else if (ipv4_is_zeronet(fl4->daddr))
+ } else if (ipv4_is_zeronet(fl4->daddr)) {
return ERR_PTR(-EINVAL);
+ }
if (dev_out->flags & IFF_LOOPBACK)
flags |= RTCF_LOCAL;

View File

@ -8,9 +8,9 @@
+ struct rtnl_link_stats64 *nlstats); */ + struct rtnl_link_stats64 *nlstats); */
+extern bool br_is_hairpin_enabled(struct net_device *dev); +extern bool br_is_hairpin_enabled(struct net_device *dev);
#if IS_ENABLED(CONFIG_BRIDGE) && IS_ENABLED(CONFIG_BRIDGE_IGMP_SNOOPING) extern void br_dev_update_stats(struct net_device *dev,
int br_multicast_list_adjacent(struct net_device *dev, struct rtnl_link_stats64 *nlstats);
@@ -213,4 +216,42 @@ static inline clock_t br_get_ageing_time @@ -216,4 +219,42 @@ static inline clock_t br_get_ageing_time
} }
#endif #endif
@ -55,7 +55,7 @@
#endif #endif
--- a/include/linux/if_vlan.h --- a/include/linux/if_vlan.h
+++ b/include/linux/if_vlan.h +++ b/include/linux/if_vlan.h
@@ -143,7 +143,10 @@ extern struct net_device *__vlan_find_de @@ -138,7 +138,10 @@ extern struct net_device *__vlan_find_de
extern int vlan_for_each(struct net_device *dev, extern int vlan_for_each(struct net_device *dev,
int (*action)(struct net_device *dev, int vid, int (*action)(struct net_device *dev, int vid,
void *arg), void *arg); void *arg), void *arg);
@ -76,12 +76,12 @@
+ +
+} /* QCA NSS ECM support */ +} /* QCA NSS ECM support */
+ +
static inline struct net_device * static inline bool is_vlan_dev(const struct net_device *dev)
__vlan_find_dev_deep_rcu(struct net_device *real_dev, {
__be16 vlan_proto, u16 vlan_id) return false;
--- a/include/linux/netdevice.h --- a/include/linux/netdevice.h
+++ b/include/linux/netdevice.h +++ b/include/linux/netdevice.h
@@ -2933,6 +2933,10 @@ enum netdev_cmd { @@ -2907,6 +2907,10 @@ enum netdev_cmd {
NETDEV_OFFLOAD_XSTATS_REPORT_USED, NETDEV_OFFLOAD_XSTATS_REPORT_USED,
NETDEV_OFFLOAD_XSTATS_REPORT_DELTA, NETDEV_OFFLOAD_XSTATS_REPORT_DELTA,
NETDEV_XDP_FEAT_CHANGE, NETDEV_XDP_FEAT_CHANGE,
@ -94,7 +94,7 @@
--- a/include/net/ip6_route.h --- a/include/net/ip6_route.h
+++ b/include/net/ip6_route.h +++ b/include/net/ip6_route.h
@@ -207,6 +207,11 @@ void rt6_multipath_rebalance(struct fib6 @@ -215,6 +215,11 @@ void rt6_multipath_rebalance(struct fib6
void rt6_uncached_list_add(struct rt6_info *rt); void rt6_uncached_list_add(struct rt6_info *rt);
void rt6_uncached_list_del(struct rt6_info *rt); void rt6_uncached_list_del(struct rt6_info *rt);
@ -108,7 +108,7 @@
const struct dst_entry *dst = skb_dst(skb); const struct dst_entry *dst = skb_dst(skb);
--- a/include/net/neighbour.h --- a/include/net/neighbour.h
+++ b/include/net/neighbour.h +++ b/include/net/neighbour.h
@@ -249,6 +249,13 @@ static inline int neigh_parms_family(str @@ -250,6 +250,13 @@ static inline int neigh_parms_family(str
return p->tbl->family; return p->tbl->family;
} }
@ -122,7 +122,7 @@
#define NEIGH_PRIV_ALIGN sizeof(long long) #define NEIGH_PRIV_ALIGN sizeof(long long)
#define NEIGH_ENTRY_SIZE(size) ALIGN((size), NEIGH_PRIV_ALIGN) #define NEIGH_ENTRY_SIZE(size) ALIGN((size), NEIGH_PRIV_ALIGN)
@@ -395,6 +402,11 @@ void __neigh_for_each_release(struct nei @@ -396,6 +403,11 @@ void __neigh_for_each_release(struct nei
int (*cb)(struct neighbour *)); int (*cb)(struct neighbour *));
int neigh_xmit(int fam, struct net_device *, const void *, struct sk_buff *); int neigh_xmit(int fam, struct net_device *, const void *, struct sk_buff *);
@ -134,7 +134,7 @@
struct neigh_seq_state { struct neigh_seq_state {
struct seq_net_private p; struct seq_net_private p;
struct neigh_table *tbl; struct neigh_table *tbl;
@@ -600,4 +612,5 @@ static inline void neigh_update_is_route @@ -601,4 +613,5 @@ static inline void neigh_update_is_route
*notify = 1; *notify = 1;
} }
} }
@ -142,7 +142,7 @@
#endif #endif
--- a/include/net/route.h --- a/include/net/route.h
+++ b/include/net/route.h +++ b/include/net/route.h
@@ -237,6 +237,11 @@ struct rtable *rt_dst_alloc(struct net_d @@ -246,6 +246,11 @@ struct rtable *rt_dst_alloc(struct net_d
unsigned int flags, u16 type, bool noxfrm); unsigned int flags, u16 type, bool noxfrm);
struct rtable *rt_dst_clone(struct net_device *dev, struct rtable *rt); struct rtable *rt_dst_clone(struct net_device *dev, struct rtable *rt);
@ -156,7 +156,7 @@
void fib_del_ifaddr(struct in_ifaddr *, struct in_ifaddr *); void fib_del_ifaddr(struct in_ifaddr *, struct in_ifaddr *);
--- a/net/bridge/br_private.h --- a/net/bridge/br_private.h
+++ b/net/bridge/br_private.h +++ b/net/bridge/br_private.h
@@ -2267,4 +2267,6 @@ void br_do_suppress_nd(struct sk_buff *s @@ -2304,4 +2304,6 @@ void br_do_suppress_nd(struct sk_buff *s
u16 vid, struct net_bridge_port *p, struct nd_msg *msg); 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); struct nd_msg *br_is_nd_neigh_msg(struct sk_buff *skb, struct nd_msg *m);
bool br_is_neigh_suppress_enabled(const struct net_bridge_port *p, u16 vid); bool br_is_neigh_suppress_enabled(const struct net_bridge_port *p, u16 vid);
@ -232,8 +232,8 @@
+ +
int __init br_fdb_init(void) int __init br_fdb_init(void)
{ {
br_fdb_cache = kmem_cache_create("bridge_fdb_cache", br_fdb_cache = KMEM_CACHE(net_bridge_fdb_entry, SLAB_HWCACHE_ALIGN);
@@ -195,6 +209,25 @@ static void fdb_notify(struct net_bridge @@ -192,6 +206,25 @@ static void fdb_notify(struct net_bridge
if (swdev_notify) if (swdev_notify)
br_switchdev_fdb_notify(br, fdb, type); br_switchdev_fdb_notify(br, fdb, type);
@ -259,7 +259,7 @@
skb = nlmsg_new(fdb_nlmsg_size(), GFP_ATOMIC); skb = nlmsg_new(fdb_nlmsg_size(), GFP_ATOMIC);
if (skb == NULL) if (skb == NULL)
goto errout; goto errout;
@@ -519,6 +552,22 @@ out: @@ -537,6 +570,22 @@ out:
spin_unlock_bh(&br->hash_lock); spin_unlock_bh(&br->hash_lock);
} }
@ -282,7 +282,7 @@
void br_fdb_cleanup(struct work_struct *work) void br_fdb_cleanup(struct work_struct *work)
{ {
struct net_bridge *br = container_of(work, struct net_bridge, struct net_bridge *br = container_of(work, struct net_bridge,
@@ -527,6 +576,7 @@ void br_fdb_cleanup(struct work_struct * @@ -545,6 +594,7 @@ void br_fdb_cleanup(struct work_struct *
unsigned long delay = hold_time(br); unsigned long delay = hold_time(br);
unsigned long work_delay = delay; unsigned long work_delay = delay;
unsigned long now = jiffies; unsigned long now = jiffies;
@ -290,7 +290,7 @@
/* this part is tricky, in order to avoid blocking learning and /* this part is tricky, in order to avoid blocking learning and
* consequently forwarding, we rely on rcu to delete objects with * consequently forwarding, we rely on rcu to delete objects with
@@ -553,8 +603,15 @@ void br_fdb_cleanup(struct work_struct * @@ -571,8 +621,15 @@ void br_fdb_cleanup(struct work_struct *
work_delay = min(work_delay, this_timer - now); work_delay = min(work_delay, this_timer - now);
} else { } else {
spin_lock_bh(&br->hash_lock); spin_lock_bh(&br->hash_lock);
@ -307,7 +307,7 @@
spin_unlock_bh(&br->hash_lock); spin_unlock_bh(&br->hash_lock);
} }
} }
@@ -891,6 +948,12 @@ void br_fdb_update(struct net_bridge *br @@ -928,6 +985,12 @@ void br_fdb_update(struct net_bridge *br
*/ */
if (unlikely(test_bit(BR_FDB_LOCKED, &fdb->flags))) if (unlikely(test_bit(BR_FDB_LOCKED, &fdb->flags)))
clear_bit(BR_FDB_LOCKED, &fdb->flags); clear_bit(BR_FDB_LOCKED, &fdb->flags);
@ -319,8 +319,8 @@
+ /* QCA NSS ECM support - End */ + /* QCA NSS ECM support - End */
} }
if (unlikely(test_bit(BR_FDB_ADDED_BY_USER, &flags))) if (unlikely(test_bit(BR_FDB_ADDED_BY_USER, &flags))) {
@@ -914,6 +977,64 @@ void br_fdb_update(struct net_bridge *br @@ -955,6 +1018,64 @@ void br_fdb_update(struct net_bridge *br
} }
} }
@ -418,7 +418,7 @@
/* Since more than one interface can be attached to a bridge, /* Since more than one interface can be attached to a bridge,
* there still maybe an alternate path for netconsole to use; * there still maybe an alternate path for netconsole to use;
* therefore there is no reason for a NETDEV_RELEASE event. * therefore there is no reason for a NETDEV_RELEASE event.
@@ -775,3 +785,97 @@ bool br_port_flag_is_set(const struct ne @@ -797,3 +807,97 @@ bool br_port_flag_is_set(const struct ne
return p->flags & flag; return p->flags & flag;
} }
EXPORT_SYMBOL_GPL(br_port_flag_is_set); EXPORT_SYMBOL_GPL(br_port_flag_is_set);
@ -488,7 +488,7 @@
+{ +{
+ struct pcpu_sw_netstats *tstats; + struct pcpu_sw_netstats *tstats;
+ +
+ // Is this a bridge? + // Is this a bridge?
+ if (!(dev->priv_flags & IFF_EBRIDGE)) + if (!(dev->priv_flags & IFF_EBRIDGE))
+ return; + return;
+ +
@ -518,7 +518,7 @@
+/* QCA NSS ECM support - End */ +/* QCA NSS ECM support - End */
--- a/net/core/neighbour.c --- a/net/core/neighbour.c
+++ b/net/core/neighbour.c +++ b/net/core/neighbour.c
@@ -1275,6 +1275,22 @@ static void neigh_update_hhs(struct neig @@ -1282,6 +1282,22 @@ static void neigh_update_hhs(struct neig
} }
} }
@ -541,7 +541,7 @@
/* Generic update routine. /* Generic update routine.
-- lladdr is new lladdr or NULL, if it is not supplied. -- lladdr is new lladdr or NULL, if it is not supplied.
-- new is new state. -- new is new state.
@@ -1303,6 +1319,7 @@ static int __neigh_update(struct neighbo @@ -1310,6 +1326,7 @@ static int __neigh_update(struct neighbo
struct net_device *dev; struct net_device *dev;
int err, notify = 0; int err, notify = 0;
u8 old; u8 old;
@ -549,7 +549,7 @@
trace_neigh_update(neigh, lladdr, new, flags, nlmsg_pid); trace_neigh_update(neigh, lladdr, new, flags, nlmsg_pid);
@@ -1317,7 +1334,10 @@ static int __neigh_update(struct neighbo @@ -1324,7 +1341,10 @@ static int __neigh_update(struct neighbo
new = old; new = old;
goto out; goto out;
} }
@ -561,7 +561,7 @@
(old & (NUD_NOARP | NUD_PERMANENT))) (old & (NUD_NOARP | NUD_PERMANENT)))
goto out; goto out;
@@ -1354,7 +1374,12 @@ static int __neigh_update(struct neighbo @@ -1361,7 +1381,12 @@ static int __neigh_update(struct neighbo
- compare new & old - compare new & old
- if they are different, check override flag - if they are different, check override flag
*/ */
@ -575,7 +575,7 @@
!memcmp(lladdr, neigh->ha, dev->addr_len)) !memcmp(lladdr, neigh->ha, dev->addr_len))
lladdr = neigh->ha; lladdr = neigh->ha;
} else { } else {
@@ -1476,8 +1501,11 @@ out: @@ -1483,8 +1508,11 @@ out:
neigh_update_gc_list(neigh); neigh_update_gc_list(neigh);
if (managed_update) if (managed_update)
neigh_update_managed_list(neigh); neigh_update_managed_list(neigh);
@ -590,7 +590,7 @@
} }
--- a/net/ipv4/fib_trie.c --- a/net/ipv4/fib_trie.c
+++ b/net/ipv4/fib_trie.c +++ b/net/ipv4/fib_trie.c
@@ -1211,6 +1211,9 @@ static bool fib_valid_key_len(u32 key, u @@ -1196,6 +1196,9 @@ static int fib_insert_alias(struct trie
static void fib_remove_alias(struct trie *t, struct key_vector *tp, static void fib_remove_alias(struct trie *t, struct key_vector *tp,
struct key_vector *l, struct fib_alias *old); struct key_vector *l, struct fib_alias *old);
@ -600,7 +600,7 @@
/* Caller must hold RTNL. */ /* Caller must hold RTNL. */
int fib_table_insert(struct net *net, struct fib_table *tb, int fib_table_insert(struct net *net, struct fib_table *tb,
struct fib_config *cfg, struct netlink_ext_ack *extack) struct fib_config *cfg, struct netlink_ext_ack *extack)
@@ -1404,6 +1407,9 @@ int fib_table_insert(struct net *net, st @@ -1386,6 +1389,9 @@ int fib_table_insert(struct net *net, st
rtmsg_fib(RTM_NEWROUTE, htonl(key), new_fa, plen, new_fa->tb_id, rtmsg_fib(RTM_NEWROUTE, htonl(key), new_fa, plen, new_fa->tb_id,
&cfg->fc_nlinfo, nlflags); &cfg->fc_nlinfo, nlflags);
succeeded: succeeded:
@ -610,7 +610,7 @@
return 0; return 0;
out_remove_new_fa: out_remove_new_fa:
@@ -1775,6 +1781,9 @@ int fib_table_delete(struct net *net, st @@ -1754,6 +1760,9 @@ int fib_table_delete(struct net *net, st
if (fa_to_delete->fa_state & FA_S_ACCESSED) if (fa_to_delete->fa_state & FA_S_ACCESSED)
rt_cache_flush(cfg->fc_nlinfo.nl_net); rt_cache_flush(cfg->fc_nlinfo.nl_net);
@ -620,7 +620,7 @@
fib_release_info(fa_to_delete->fa_info); fib_release_info(fa_to_delete->fa_info);
alias_free_mem_rcu(fa_to_delete); alias_free_mem_rcu(fa_to_delete);
return 0; return 0;
@@ -2407,6 +2416,20 @@ void __init fib_trie_init(void) @@ -2386,6 +2395,20 @@ void __init fib_trie_init(void)
0, SLAB_PANIC | SLAB_ACCOUNT, NULL); 0, SLAB_PANIC | SLAB_ACCOUNT, NULL);
} }
@ -643,7 +643,7 @@
struct fib_table *tb; struct fib_table *tb;
--- a/net/ipv6/ndisc.c --- a/net/ipv6/ndisc.c
+++ b/net/ipv6/ndisc.c +++ b/net/ipv6/ndisc.c
@@ -666,6 +666,7 @@ void ndisc_send_ns(struct net_device *de @@ -670,6 +670,7 @@ void ndisc_send_ns(struct net_device *de
if (skb) if (skb)
ndisc_send_skb(skb, daddr, saddr); ndisc_send_skb(skb, daddr, saddr);
} }
@ -653,7 +653,7 @@
const struct in6_addr *daddr) const struct in6_addr *daddr)
--- a/net/ipv6/route.c --- a/net/ipv6/route.c
+++ b/net/ipv6/route.c +++ b/net/ipv6/route.c
@@ -198,6 +198,9 @@ static void rt6_uncached_list_flush_dev( @@ -196,6 +196,9 @@ static void rt6_uncached_list_flush_dev(
} }
} }
@ -663,7 +663,7 @@
static inline const void *choose_neigh_daddr(const struct in6_addr *p, static inline const void *choose_neigh_daddr(const struct in6_addr *p,
struct sk_buff *skb, struct sk_buff *skb,
const void *daddr) const void *daddr)
@@ -3868,6 +3871,10 @@ int ip6_route_add(struct fib6_config *cf @@ -3917,6 +3920,10 @@ int ip6_route_add(struct fib6_config *cf
return PTR_ERR(rt); return PTR_ERR(rt);
err = __ip6_ins_rt(rt, &cfg->fc_nlinfo, extack); err = __ip6_ins_rt(rt, &cfg->fc_nlinfo, extack);
@ -674,7 +674,7 @@
fib6_info_release(rt); fib6_info_release(rt);
return err; return err;
@@ -3889,6 +3896,9 @@ static int __ip6_del_rt(struct fib6_info @@ -3938,6 +3945,9 @@ static int __ip6_del_rt(struct fib6_info
err = fib6_del(rt, info); err = fib6_del(rt, info);
spin_unlock_bh(&table->tb6_lock); spin_unlock_bh(&table->tb6_lock);
@ -684,7 +684,7 @@
out: out:
fib6_info_release(rt); fib6_info_release(rt);
return err; return err;
@@ -6336,6 +6346,20 @@ static int ip6_route_dev_notify(struct n @@ -6409,6 +6419,20 @@ static int ip6_route_dev_notify(struct n
return NOTIFY_OK; return NOTIFY_OK;
} }
@ -707,7 +707,7 @@
*/ */
--- a/net/core/dev.c --- a/net/core/dev.c
+++ b/net/core/dev.c +++ b/net/core/dev.c
@@ -1699,6 +1699,7 @@ const char *netdev_cmd_to_name(enum netd @@ -1768,6 +1768,7 @@ const char *netdev_cmd_to_name(enum netd
N(PRE_CHANGEADDR) N(OFFLOAD_XSTATS_ENABLE) N(OFFLOAD_XSTATS_DISABLE) N(PRE_CHANGEADDR) N(OFFLOAD_XSTATS_ENABLE) N(OFFLOAD_XSTATS_DISABLE)
N(OFFLOAD_XSTATS_REPORT_USED) N(OFFLOAD_XSTATS_REPORT_DELTA) N(OFFLOAD_XSTATS_REPORT_USED) N(OFFLOAD_XSTATS_REPORT_DELTA)
N(XDP_FEAT_CHANGE) N(XDP_FEAT_CHANGE)
@ -717,7 +717,7 @@
return "UNKNOWN_NETDEV_EVENT"; return "UNKNOWN_NETDEV_EVENT";
--- a/net/ipv6/addrconf.c --- a/net/ipv6/addrconf.c
+++ b/net/ipv6/addrconf.c +++ b/net/ipv6/addrconf.c
@@ -1002,6 +1002,7 @@ void inet6_ifa_finish_destroy(struct ine @@ -993,6 +993,7 @@ void inet6_ifa_finish_destroy(struct ine
kfree_rcu(ifp, rcu); kfree_rcu(ifp, rcu);
} }
@ -727,7 +727,7 @@
ipv6_link_dev_addr(struct inet6_dev *idev, struct inet6_ifaddr *ifp) ipv6_link_dev_addr(struct inet6_dev *idev, struct inet6_ifaddr *ifp)
--- a/include/net/vxlan.h --- a/include/net/vxlan.h
+++ b/include/net/vxlan.h +++ b/include/net/vxlan.h
@@ -440,6 +440,15 @@ static inline __be32 vxlan_compute_rco(u @@ -441,6 +441,15 @@ static inline __be32 vxlan_compute_rco(u
return vni_field; return vni_field;
} }
@ -754,7 +754,7 @@
IPPROTO_ENCAP = 98, /* Encapsulation Header */ IPPROTO_ENCAP = 98, /* Encapsulation Header */
#define IPPROTO_ENCAP IPPROTO_ENCAP #define IPPROTO_ENCAP IPPROTO_ENCAP
IPPROTO_PIM = 103, /* Protocol Independent Multicast */ IPPROTO_PIM = 103, /* Protocol Independent Multicast */
@@ -327,7 +329,7 @@ struct sockaddr_in { @@ -329,7 +331,7 @@ struct sockaddr_in {
#endif #endif
/* <asm/byteorder.h> contains the htonl type stuff.. */ /* <asm/byteorder.h> contains the htonl type stuff.. */
@ -774,7 +774,7 @@
IPPROTO_ENCAP = 98, /* Encapsulation Header */ IPPROTO_ENCAP = 98, /* Encapsulation Header */
#define IPPROTO_ENCAP IPPROTO_ENCAP #define IPPROTO_ENCAP IPPROTO_ENCAP
IPPROTO_PIM = 103, /* Protocol Independent Multicast */ IPPROTO_PIM = 103, /* Protocol Independent Multicast */
@@ -327,7 +329,7 @@ struct sockaddr_in { @@ -329,7 +331,7 @@ struct sockaddr_in {
#endif #endif
/* <asm/byteorder.h> contains the htonl type stuff.. */ /* <asm/byteorder.h> contains the htonl type stuff.. */
@ -785,7 +785,7 @@
#endif /* _UAPI_LINUX_IN_H */ #endif /* _UAPI_LINUX_IN_H */
--- a/net/netfilter/nf_conntrack_ecache.c --- a/net/netfilter/nf_conntrack_ecache.c
+++ b/net/netfilter/nf_conntrack_ecache.c +++ b/net/netfilter/nf_conntrack_ecache.c
@@ -365,7 +365,7 @@ void nf_conntrack_register_notifier(stru @@ -365,7 +365,7 @@ int nf_conntrack_register_notifier(struc
mutex_lock(&nf_ct_ecache_mutex); mutex_lock(&nf_ct_ecache_mutex);
notify = rcu_dereference_protected(net->ct.nf_conntrack_event_cb, notify = rcu_dereference_protected(net->ct.nf_conntrack_event_cb,
lockdep_is_held(&nf_ct_ecache_mutex)); lockdep_is_held(&nf_ct_ecache_mutex));

View File

@ -1,6 +1,6 @@
--- a/drivers/net/bonding/bond_3ad.c --- a/drivers/net/bonding/bond_3ad.c
+++ b/drivers/net/bonding/bond_3ad.c +++ b/drivers/net/bonding/bond_3ad.c
@@ -116,6 +116,40 @@ static void ad_marker_response_received( @@ -115,6 +115,40 @@ static void ad_marker_response_received(
struct port *port); struct port *port);
static void ad_update_actor_keys(struct port *port, bool reset); static void ad_update_actor_keys(struct port *port, bool reset);
@ -41,7 +41,7 @@
/* ================= api to bonding and kernel code ================== */ /* ================= api to bonding and kernel code ================== */
@@ -1073,7 +1107,31 @@ static void ad_mux_machine(struct port * @@ -1159,7 +1193,31 @@ static void ad_mux_machine(struct port *
ad_disable_collecting_distributing(port, ad_disable_collecting_distributing(port,
update_slave_arr); update_slave_arr);
port->ntt = true; port->ntt = true;
@ -73,7 +73,7 @@
case AD_MUX_COLLECTING_DISTRIBUTING: case AD_MUX_COLLECTING_DISTRIBUTING:
port->actor_oper_port_state |= LACP_STATE_COLLECTING; port->actor_oper_port_state |= LACP_STATE_COLLECTING;
port->actor_oper_port_state |= LACP_STATE_DISTRIBUTING; port->actor_oper_port_state |= LACP_STATE_DISTRIBUTING;
@@ -1917,6 +1975,7 @@ static void ad_enable_collecting_distrib @@ -2060,6 +2118,7 @@ static void ad_enable_collecting_distrib
bool *update_slave_arr) bool *update_slave_arr)
{ {
if (port->aggregator->is_active) { if (port->aggregator->is_active) {
@ -81,7 +81,7 @@
slave_dbg(port->slave->bond->dev, port->slave->dev, slave_dbg(port->slave->bond->dev, port->slave->dev,
"Enabling port %d (LAG %d)\n", "Enabling port %d (LAG %d)\n",
port->actor_port_number, port->actor_port_number,
@@ -1924,6 +1983,16 @@ static void ad_enable_collecting_distrib @@ -2067,6 +2126,16 @@ static void ad_enable_collecting_distrib
__enable_port(port); __enable_port(port);
/* Slave array needs update */ /* Slave array needs update */
*update_slave_arr = true; *update_slave_arr = true;
@ -98,7 +98,7 @@
} }
} }
@@ -2683,6 +2752,104 @@ int bond_3ad_get_active_agg_info(struct @@ -2824,6 +2893,104 @@ int bond_3ad_get_active_agg_info(struct
return ret; return ret;
} }
@ -227,7 +227,7 @@
/** /**
* bond_dev_queue_xmit - Prepare skb for xmit. * bond_dev_queue_xmit - Prepare skb for xmit.
* *
@@ -1189,6 +1204,23 @@ void bond_change_active_slave(struct bon @@ -1308,6 +1323,23 @@ void bond_change_active_slave(struct bon
if (BOND_MODE(bond) == BOND_MODE_8023AD) if (BOND_MODE(bond) == BOND_MODE_8023AD)
bond_3ad_handle_link_change(new_active, BOND_LINK_UP); bond_3ad_handle_link_change(new_active, BOND_LINK_UP);
@ -251,7 +251,7 @@
if (bond_is_lb(bond)) if (bond_is_lb(bond))
bond_alb_handle_link_change(bond, new_active, BOND_LINK_UP); bond_alb_handle_link_change(bond, new_active, BOND_LINK_UP);
} else { } else {
@@ -1833,6 +1865,7 @@ int bond_enslave(struct net_device *bond @@ -1952,6 +1984,7 @@ int bond_enslave(struct net_device *bond
const struct net_device_ops *slave_ops = slave_dev->netdev_ops; const struct net_device_ops *slave_ops = slave_dev->netdev_ops;
struct slave *new_slave = NULL, *prev_slave; struct slave *new_slave = NULL, *prev_slave;
struct sockaddr_storage ss; struct sockaddr_storage ss;
@ -259,7 +259,7 @@
int link_reporting; int link_reporting;
int res = 0, i; int res = 0, i;
@@ -2278,6 +2311,15 @@ int bond_enslave(struct net_device *bond @@ -2412,6 +2445,15 @@ skip_mac_set:
bond_is_active_slave(new_slave) ? "an active" : "a backup", bond_is_active_slave(new_slave) ? "an active" : "a backup",
new_slave->link != BOND_LINK_DOWN ? "an up" : "a down"); new_slave->link != BOND_LINK_DOWN ? "an up" : "a down");
@ -275,7 +275,7 @@
/* enslave is successful */ /* enslave is successful */
bond_queue_slave_event(new_slave); bond_queue_slave_event(new_slave);
return 0; return 0;
@@ -2343,6 +2385,15 @@ err_undo_flags: @@ -2477,6 +2519,15 @@ err_undo_flags:
} }
} }
@ -291,7 +291,7 @@
return res; return res;
} }
@@ -2364,6 +2415,7 @@ static int __bond_release_one(struct net @@ -2498,6 +2549,7 @@ static int __bond_release_one(struct net
struct bonding *bond = netdev_priv(bond_dev); struct bonding *bond = netdev_priv(bond_dev);
struct slave *slave, *oldcurrent; struct slave *slave, *oldcurrent;
struct sockaddr_storage ss; struct sockaddr_storage ss;
@ -299,7 +299,7 @@
int old_flags = bond_dev->flags; int old_flags = bond_dev->flags;
netdev_features_t old_features = bond_dev->features; netdev_features_t old_features = bond_dev->features;
@@ -2386,6 +2438,15 @@ static int __bond_release_one(struct net @@ -2520,6 +2572,15 @@ static int __bond_release_one(struct net
bond_set_slave_inactive_flags(slave, BOND_SLAVE_NOTIFY_NOW); bond_set_slave_inactive_flags(slave, BOND_SLAVE_NOTIFY_NOW);
@ -315,7 +315,7 @@
bond_sysfs_slave_del(slave); bond_sysfs_slave_del(slave);
/* recompute stats just before removing the slave */ /* recompute stats just before removing the slave */
@@ -2708,6 +2769,8 @@ static void bond_miimon_commit(struct bo @@ -2850,6 +2911,8 @@ static void bond_miimon_commit(struct bo
struct slave *slave, *primary, *active; struct slave *slave, *primary, *active;
bool do_failover = false; bool do_failover = false;
struct list_head *iter; struct list_head *iter;
@ -324,7 +324,7 @@
ASSERT_RTNL(); ASSERT_RTNL();
@@ -2747,6 +2810,12 @@ static void bond_miimon_commit(struct bo @@ -2889,6 +2952,12 @@ static void bond_miimon_commit(struct bo
bond_set_active_slave(slave); bond_set_active_slave(slave);
} }
@ -337,7 +337,7 @@
slave_info(bond->dev, slave->dev, "link status definitely up, %u Mbps %s duplex\n", slave_info(bond->dev, slave->dev, "link status definitely up, %u Mbps %s duplex\n",
slave->speed == SPEED_UNKNOWN ? 0 : slave->speed, slave->speed == SPEED_UNKNOWN ? 0 : slave->speed,
slave->duplex ? "full" : "half"); slave->duplex ? "full" : "half");
@@ -2795,6 +2864,16 @@ static void bond_miimon_commit(struct bo @@ -2937,6 +3006,16 @@ static void bond_miimon_commit(struct bo
unblock_netpoll_tx(); unblock_netpoll_tx();
} }
@ -354,7 +354,7 @@
bond_set_carrier(bond); bond_set_carrier(bond);
} }
@@ -4047,8 +4126,219 @@ static inline u32 bond_eth_hash(struct s @@ -4189,8 +4268,224 @@ static inline u32 bond_eth_hash(struct s
return 0; return 0;
ep = (struct ethhdr *)(data + mhoff); ep = (struct ethhdr *)(data + mhoff);
@ -521,6 +521,11 @@
+ u8 *dst_mac, void *src, + u8 *dst_mac, void *src,
+ void *dst, u16 protocol, + void *dst, u16 protocol,
+ struct net_device *bond_dev, + struct net_device *bond_dev,
+ __be16 *layer4hdr);
+struct net_device *bond_get_tx_dev(struct sk_buff *skb, uint8_t *src_mac,
+ u8 *dst_mac, void *src,
+ void *dst, u16 protocol,
+ struct net_device *bond_dev,
+ __be16 *layer4hdr) + __be16 *layer4hdr)
+{ +{
+ struct bonding *bond; + struct bonding *bond;
@ -575,7 +580,7 @@
static bool bond_flow_ip(struct sk_buff *skb, struct flow_keys *fk, const void *data, static bool bond_flow_ip(struct sk_buff *skb, struct flow_keys *fk, const void *data,
int hlen, __be16 l2_proto, int *nhoff, int *ip_proto, bool l34) int hlen, __be16 l2_proto, int *nhoff, int *ip_proto, bool l34)
@@ -5177,15 +5467,18 @@ static netdev_tx_t bond_3ad_xor_xmit(str @@ -5319,15 +5614,18 @@ static netdev_tx_t bond_3ad_xor_xmit(str
struct net_device *dev) struct net_device *dev)
{ {
struct bonding *bond = netdev_priv(dev); struct bonding *bond = netdev_priv(dev);
@ -601,7 +606,7 @@
} }
/* in broadcast mode, we send everything to all usable interfaces. */ /* in broadcast mode, we send everything to all usable interfaces. */
@@ -5435,8 +5728,9 @@ static netdev_tx_t __bond_start_xmit(str @@ -5577,8 +5875,9 @@ static netdev_tx_t __bond_start_xmit(str
return bond_xmit_roundrobin(skb, dev); return bond_xmit_roundrobin(skb, dev);
case BOND_MODE_ACTIVEBACKUP: case BOND_MODE_ACTIVEBACKUP:
return bond_xmit_activebackup(skb, dev); return bond_xmit_activebackup(skb, dev);
@ -614,10 +619,10 @@
return bond_xmit_broadcast(skb, dev); return bond_xmit_broadcast(skb, dev);
--- a/include/net/bond_3ad.h --- a/include/net/bond_3ad.h
+++ b/include/net/bond_3ad.h +++ b/include/net/bond_3ad.h
@@ -302,8 +302,15 @@ int bond_3ad_lacpdu_recv(const struct sk @@ -308,6 +308,14 @@ int bond_3ad_lacpdu_recv(const struct sk
struct slave *slave);
int bond_3ad_set_carrier(struct bonding *bond); int bond_3ad_set_carrier(struct bonding *bond);
void bond_3ad_update_lacp_rate(struct bonding *bond); void bond_3ad_update_lacp_rate(struct bonding *bond);
void bond_3ad_update_lacp_active(struct bonding *bond);
+/* QCA NSS ECM bonding support */ +/* QCA NSS ECM bonding support */
+struct net_device *bond_3ad_get_tx_dev(struct sk_buff *skb, uint8_t *src_mac, +struct net_device *bond_3ad_get_tx_dev(struct sk_buff *skb, uint8_t *src_mac,
+ uint8_t *dst_mac, void *src, + uint8_t *dst_mac, void *src,
@ -629,8 +634,6 @@
void bond_3ad_update_ad_actor_settings(struct bonding *bond); void bond_3ad_update_ad_actor_settings(struct bonding *bond);
int bond_3ad_stats_fill(struct sk_buff *skb, struct bond_3ad_stats *stats); int bond_3ad_stats_fill(struct sk_buff *skb, struct bond_3ad_stats *stats);
size_t bond_3ad_stats_size(void); size_t bond_3ad_stats_size(void);
#endif /* _NET_BOND_3AD_H */
-
--- a/include/net/bonding.h --- a/include/net/bonding.h
+++ b/include/net/bonding.h +++ b/include/net/bonding.h
@@ -90,6 +90,8 @@ @@ -90,6 +90,8 @@
@ -642,7 +645,7 @@
#ifdef CONFIG_NET_POLL_CONTROLLER #ifdef CONFIG_NET_POLL_CONTROLLER
extern atomic_t netpoll_block_tx; extern atomic_t netpoll_block_tx;
@@ -653,6 +655,7 @@ struct bond_net { @@ -676,6 +678,7 @@ struct bond_net {
int bond_rcv_validate(const struct sk_buff *skb, struct bonding *bond, struct slave *slave); int bond_rcv_validate(const struct sk_buff *skb, struct bonding *bond, struct slave *slave);
netdev_tx_t bond_dev_queue_xmit(struct bonding *bond, struct sk_buff *skb, struct net_device *slave_dev); netdev_tx_t bond_dev_queue_xmit(struct bonding *bond, struct sk_buff *skb, struct net_device *slave_dev);
@ -650,7 +653,7 @@
int bond_create(struct net *net, const char *name); int bond_create(struct net *net, const char *name);
int bond_create_sysfs(struct bond_net *net); int bond_create_sysfs(struct bond_net *net);
void bond_destroy_sysfs(struct bond_net *net); void bond_destroy_sysfs(struct bond_net *net);
@@ -684,6 +687,13 @@ struct bond_vlan_tag *bond_verify_device @@ -707,6 +710,13 @@ struct bond_vlan_tag *bond_verify_device
int level); int level);
int bond_update_slave_arr(struct bonding *bond, struct slave *skipslave); int bond_update_slave_arr(struct bonding *bond, struct slave *skipslave);
void bond_slave_arr_work_rearm(struct bonding *bond, unsigned long delay); void bond_slave_arr_work_rearm(struct bonding *bond, unsigned long delay);
@ -664,7 +667,7 @@
void bond_work_init_all(struct bonding *bond); void bond_work_init_all(struct bonding *bond);
#ifdef CONFIG_PROC_FS #ifdef CONFIG_PROC_FS
@@ -788,4 +798,18 @@ static inline netdev_tx_t bond_tx_drop(s @@ -811,4 +821,18 @@ static inline netdev_tx_t bond_tx_drop(s
return NET_XMIT_DROP; return NET_XMIT_DROP;
} }