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_KERNEL_HASH-5.10.241 = 08c1e982064c81f8445a8fff2293d430c716c11fd3185606b8275718d696d8d6
LINUX_VERSION-5.10 = .242
LINUX_KERNEL_HASH-5.10.242 = bc3ae7003174e26c9a39534cfb8d66cee1a0ba6e1dd0381a9fe092f9de6ba9cd

View File

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

View File

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

View File

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

View File

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

View File

@ -1,2 +1,2 @@
LINUX_VERSION-6.6 = .103
LINUX_KERNEL_HASH-6.6.103 = d288dd38c3e62ba576ba6b3ad2a84cfba65cd43b702f6c50d1f701aee942b18e
LINUX_VERSION-6.6 = .104
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); */
+extern bool br_is_hairpin_enabled(struct net_device *dev);
#if IS_ENABLED(CONFIG_BRIDGE) && IS_ENABLED(CONFIG_BRIDGE_IGMP_SNOOPING)
int br_multicast_list_adjacent(struct net_device *dev,
@@ -213,4 +216,42 @@ static inline clock_t br_get_ageing_time
extern void br_dev_update_stats(struct net_device *dev,
struct rtnl_link_stats64 *nlstats);
@@ -216,4 +219,42 @@ static inline clock_t br_get_ageing_time
}
#endif
@ -55,7 +55,7 @@
#endif
--- a/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,
int (*action)(struct net_device *dev, int vid,
void *arg), void *arg);
@ -76,12 +76,12 @@
+
+} /* QCA NSS ECM support */
+
static inline struct net_device *
__vlan_find_dev_deep_rcu(struct net_device *real_dev,
__be16 vlan_proto, u16 vlan_id)
static inline bool is_vlan_dev(const struct net_device *dev)
{
return false;
--- a/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_DELTA,
NETDEV_XDP_FEAT_CHANGE,
@ -94,7 +94,7 @@
--- a/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_del(struct rt6_info *rt);
@ -108,7 +108,7 @@
const struct dst_entry *dst = skb_dst(skb);
--- a/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;
}
@ -122,7 +122,7 @@
#define NEIGH_PRIV_ALIGN sizeof(long long)
#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 neigh_xmit(int fam, struct net_device *, const void *, struct sk_buff *);
@ -134,7 +134,7 @@
struct neigh_seq_state {
struct seq_net_private p;
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;
}
}
@ -142,7 +142,7 @@
#endif
--- a/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);
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 *);
--- a/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);
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);
@ -232,8 +232,8 @@
+
int __init br_fdb_init(void)
{
br_fdb_cache = kmem_cache_create("bridge_fdb_cache",
@@ -195,6 +209,25 @@ static void fdb_notify(struct net_bridge
br_fdb_cache = KMEM_CACHE(net_bridge_fdb_entry, SLAB_HWCACHE_ALIGN);
@@ -192,6 +206,25 @@ static void fdb_notify(struct net_bridge
if (swdev_notify)
br_switchdev_fdb_notify(br, fdb, type);
@ -259,7 +259,7 @@
skb = nlmsg_new(fdb_nlmsg_size(), GFP_ATOMIC);
if (skb == NULL)
goto errout;
@@ -519,6 +552,22 @@ out:
@@ -537,6 +570,22 @@ out:
spin_unlock_bh(&br->hash_lock);
}
@ -282,7 +282,7 @@
void br_fdb_cleanup(struct work_struct *work)
{
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 work_delay = delay;
unsigned long now = jiffies;
@ -290,7 +290,7 @@
/* this part is tricky, in order to avoid blocking learning and
* 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);
} else {
spin_lock_bh(&br->hash_lock);
@ -307,7 +307,7 @@
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)))
clear_bit(BR_FDB_LOCKED, &fdb->flags);
@ -319,8 +319,8 @@
+ /* QCA NSS ECM support - End */
}
if (unlikely(test_bit(BR_FDB_ADDED_BY_USER, &flags)))
@@ -914,6 +977,64 @@ void br_fdb_update(struct net_bridge *br
if (unlikely(test_bit(BR_FDB_ADDED_BY_USER, &flags))) {
@@ -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,
* there still maybe an alternate path for netconsole to use;
* 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;
}
EXPORT_SYMBOL_GPL(br_port_flag_is_set);
@ -488,7 +488,7 @@
+{
+ struct pcpu_sw_netstats *tstats;
+
+ // Is this a bridge?
+ // Is this a bridge?
+ if (!(dev->priv_flags & IFF_EBRIDGE))
+ return;
+
@ -518,7 +518,7 @@
+/* QCA NSS ECM support - End */
--- a/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.
-- lladdr is new lladdr or NULL, if it is not supplied.
-- 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;
int err, notify = 0;
u8 old;
@ -549,7 +549,7 @@
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;
goto out;
}
@ -561,7 +561,7 @@
(old & (NUD_NOARP | NUD_PERMANENT)))
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
- if they are different, check override flag
*/
@ -575,7 +575,7 @@
!memcmp(lladdr, neigh->ha, dev->addr_len))
lladdr = neigh->ha;
} else {
@@ -1476,8 +1501,11 @@ out:
@@ -1483,8 +1508,11 @@ out:
neigh_update_gc_list(neigh);
if (managed_update)
neigh_update_managed_list(neigh);
@ -590,7 +590,7 @@
}
--- a/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,
struct key_vector *l, struct fib_alias *old);
@ -600,7 +600,7 @@
/* Caller must hold RTNL. */
int fib_table_insert(struct net *net, struct fib_table *tb,
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,
&cfg->fc_nlinfo, nlflags);
succeeded:
@ -610,7 +610,7 @@
return 0;
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)
rt_cache_flush(cfg->fc_nlinfo.nl_net);
@ -620,7 +620,7 @@
fib_release_info(fa_to_delete->fa_info);
alias_free_mem_rcu(fa_to_delete);
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);
}
@ -643,7 +643,7 @@
struct fib_table *tb;
--- a/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)
ndisc_send_skb(skb, daddr, saddr);
}
@ -653,7 +653,7 @@
const struct in6_addr *daddr)
--- a/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,
struct sk_buff *skb,
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);
err = __ip6_ins_rt(rt, &cfg->fc_nlinfo, extack);
@ -674,7 +674,7 @@
fib6_info_release(rt);
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);
spin_unlock_bh(&table->tb6_lock);
@ -684,7 +684,7 @@
out:
fib6_info_release(rt);
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;
}
@ -707,7 +707,7 @@
*/
--- a/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(OFFLOAD_XSTATS_REPORT_USED) N(OFFLOAD_XSTATS_REPORT_DELTA)
N(XDP_FEAT_CHANGE)
@ -717,7 +717,7 @@
return "UNKNOWN_NETDEV_EVENT";
--- a/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);
}
@ -727,7 +727,7 @@
ipv6_link_dev_addr(struct inet6_dev *idev, struct inet6_ifaddr *ifp)
--- a/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;
}
@ -754,7 +754,7 @@
IPPROTO_ENCAP = 98, /* Encapsulation Header */
#define IPPROTO_ENCAP IPPROTO_ENCAP
IPPROTO_PIM = 103, /* Protocol Independent Multicast */
@@ -327,7 +329,7 @@ struct sockaddr_in {
@@ -329,7 +331,7 @@ struct sockaddr_in {
#endif
/* <asm/byteorder.h> contains the htonl type stuff.. */
@ -774,7 +774,7 @@
IPPROTO_ENCAP = 98, /* Encapsulation Header */
#define IPPROTO_ENCAP IPPROTO_ENCAP
IPPROTO_PIM = 103, /* Protocol Independent Multicast */
@@ -327,7 +329,7 @@ struct sockaddr_in {
@@ -329,7 +331,7 @@ struct sockaddr_in {
#endif
/* <asm/byteorder.h> contains the htonl type stuff.. */
@ -785,7 +785,7 @@
#endif /* _UAPI_LINUX_IN_H */
--- a/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);
notify = rcu_dereference_protected(net->ct.nf_conntrack_event_cb,
lockdep_is_held(&nf_ct_ecache_mutex));

View File

@ -1,6 +1,6 @@
--- a/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);
static void ad_update_actor_keys(struct port *port, bool reset);
@ -41,7 +41,7 @@
/* ================= 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,
update_slave_arr);
port->ntt = true;
@ -73,7 +73,7 @@
case AD_MUX_COLLECTING_DISTRIBUTING:
port->actor_oper_port_state |= LACP_STATE_COLLECTING;
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)
{
if (port->aggregator->is_active) {
@ -81,7 +81,7 @@
slave_dbg(port->slave->bond->dev, port->slave->dev,
"Enabling port %d (LAG %d)\n",
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);
/* Slave array needs update */
*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;
}
@ -227,7 +227,7 @@
/**
* 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)
bond_3ad_handle_link_change(new_active, BOND_LINK_UP);
@ -251,7 +251,7 @@
if (bond_is_lb(bond))
bond_alb_handle_link_change(bond, new_active, BOND_LINK_UP);
} 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;
struct slave *new_slave = NULL, *prev_slave;
struct sockaddr_storage ss;
@ -259,7 +259,7 @@
int link_reporting;
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",
new_slave->link != BOND_LINK_DOWN ? "an up" : "a down");
@ -275,7 +275,7 @@
/* enslave is successful */
bond_queue_slave_event(new_slave);
return 0;
@@ -2343,6 +2385,15 @@ err_undo_flags:
@@ -2477,6 +2519,15 @@ err_undo_flags:
}
}
@ -291,7 +291,7 @@
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 slave *slave, *oldcurrent;
struct sockaddr_storage ss;
@ -299,7 +299,7 @@
int old_flags = bond_dev->flags;
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);
@ -315,7 +315,7 @@
bond_sysfs_slave_del(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;
bool do_failover = false;
struct list_head *iter;
@ -324,7 +324,7 @@
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);
}
@ -337,7 +337,7 @@
slave_info(bond->dev, slave->dev, "link status definitely up, %u Mbps %s duplex\n",
slave->speed == SPEED_UNKNOWN ? 0 : slave->speed,
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();
}
@ -354,7 +354,7 @@
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;
ep = (struct ethhdr *)(data + mhoff);
@ -521,6 +521,11 @@
+ u8 *dst_mac, void *src,
+ void *dst, u16 protocol,
+ 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)
+{
+ struct bonding *bond;
@ -575,7 +580,7 @@
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)
@@ -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 bonding *bond = netdev_priv(dev);
@ -601,7 +606,7 @@
}
/* 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);
case BOND_MODE_ACTIVEBACKUP:
return bond_xmit_activebackup(skb, dev);
@ -614,10 +619,10 @@
return bond_xmit_broadcast(skb, dev);
--- a/include/net/bond_3ad.h
+++ b/include/net/bond_3ad.h
@@ -302,8 +302,15 @@ int bond_3ad_lacpdu_recv(const struct sk
struct slave *slave);
@@ -308,6 +308,14 @@ int bond_3ad_lacpdu_recv(const struct sk
int bond_3ad_set_carrier(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 */
+struct net_device *bond_3ad_get_tx_dev(struct sk_buff *skb, uint8_t *src_mac,
+ uint8_t *dst_mac, void *src,
@ -629,8 +634,6 @@
void bond_3ad_update_ad_actor_settings(struct bonding *bond);
int bond_3ad_stats_fill(struct sk_buff *skb, struct bond_3ad_stats *stats);
size_t bond_3ad_stats_size(void);
#endif /* _NET_BOND_3AD_H */
-
--- a/include/net/bonding.h
+++ b/include/net/bonding.h
@@ -90,6 +90,8 @@
@ -642,7 +645,7 @@
#ifdef CONFIG_NET_POLL_CONTROLLER
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);
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_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 bond_update_slave_arr(struct bonding *bond, struct slave *skipslave);
void bond_slave_arr_work_rearm(struct bonding *bond, unsigned long delay);
@ -664,7 +667,7 @@
void bond_work_init_all(struct bonding *bond);
#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;
}