* [PATCH net v2 00/11] net: hold instance lock during NETDEV_UP/REGISTER/UNREGISTER
@ 2025-03-27 13:56 Stanislav Fomichev
2025-03-27 13:56 ` [PATCH net v2 01/11] net: switch to netif_disable_lro in inetdev_init Stanislav Fomichev
` (11 more replies)
0 siblings, 12 replies; 38+ messages in thread
From: Stanislav Fomichev @ 2025-03-27 13:56 UTC (permalink / raw)
To: netdev; +Cc: davem, edumazet, kuba, pabeni
Solving the issue reported by Cosmin in [0] requires consistent
lock during NETDEV_UP/REGISTER/UNREGISTER notifiers. This series
addresses that (along with some other fixes in net/ipv4/devinet.c
and net/ipv6/addrconf.c) and appends the patches from Jakub
that were conditional on locked NETDEV_UNREGISTER.
0: https://lore.kernel.org/netdev/700fa36b94cbd57cfea2622029b087643c80cbc9.camel@nvidia.com/
v2:
- export netdev_get_by_index_lock
- new patch: add netdev_lockdep_set_classes to mlx5
- new patch: exercise notifiers in netdevsim
- ignore specific locked netdev in call_netdevice_register_notifiers,
not all
Jakub Kicinski (3):
net: designate XSK pool pointers in queues as "ops protected"
netdev: add "ops compat locking" helpers
netdev: don't hold rtnl_lock over nl queue info get when possible
Stanislav Fomichev (8):
net: switch to netif_disable_lro in inetdev_init
net: hold instance lock during NETDEV_REGISTER/UP/UNREGISTER
net: use netif_disable_lro in ipv6_add_dev
net: release instance lock during NETDEV_UNREGISTER for bond/team
net/mlx5e: use netdev_lockdep_set_classes
netdevsim: add dummy device notifiers
net: dummy: request ops lock
docs: net: document netdev notifier expectations
Documentation/networking/netdevices.rst | 18 +++
drivers/net/bonding/bond_main.c | 2 +
drivers/net/dummy.c | 1 +
.../net/ethernet/mellanox/mlx5/core/en_main.c | 2 +
drivers/net/netdevsim/netdev.c | 58 +++++++++
drivers/net/netdevsim/netdevsim.h | 3 +
drivers/net/team/team_core.c | 2 +
include/linux/netdevice.h | 2 +
include/net/netdev_lock.h | 16 +++
include/net/netdev_rx_queue.h | 6 +-
net/core/dev.c | 117 ++++++++++++++----
net/core/dev.h | 16 ++-
net/core/netdev-genl.c | 18 ++-
net/ipv4/devinet.c | 2 +-
net/ipv6/addrconf.c | 17 ++-
net/xdp/xsk_buff_pool.c | 7 +-
16 files changed, 245 insertions(+), 42 deletions(-)
--
2.48.1
^ permalink raw reply [flat|nested] 38+ messages in thread
* [PATCH net v2 01/11] net: switch to netif_disable_lro in inetdev_init
2025-03-27 13:56 [PATCH net v2 00/11] net: hold instance lock during NETDEV_UP/REGISTER/UNREGISTER Stanislav Fomichev
@ 2025-03-27 13:56 ` Stanislav Fomichev
2025-03-27 18:40 ` Jakub Kicinski
2025-03-27 18:59 ` Jakub Kicinski
2025-03-27 13:56 ` [PATCH net v2 02/11] net: hold instance lock during NETDEV_REGISTER/UP/UNREGISTER Stanislav Fomichev
` (10 subsequent siblings)
11 siblings, 2 replies; 38+ messages in thread
From: Stanislav Fomichev @ 2025-03-27 13:56 UTC (permalink / raw)
To: netdev; +Cc: davem, edumazet, kuba, pabeni, Cosmin Ratiu
Cosmin reports the following deadlock:
dump_stack_lvl+0x62/0x90
print_deadlock_bug+0x274/0x3b0
__lock_acquire+0x1229/0x2470
lock_acquire+0xb7/0x2b0
__mutex_lock+0xa6/0xd20
dev_disable_lro+0x20/0x80
inetdev_init+0x12f/0x1f0
inetdev_event+0x48b/0x870
notifier_call_chain+0x38/0xf0
netif_change_net_namespace+0x72e/0x9f0
do_setlink.isra.0+0xd5/0x1220
rtnl_newlink+0x7ea/0xb50
rtnetlink_rcv_msg+0x459/0x5e0
netlink_rcv_skb+0x54/0x100
netlink_unicast+0x193/0x270
netlink_sendmsg+0x204/0x450
Switch to netif_disable_lro which assumes the caller holds the instance
lock. inetdev_init is called for blackhole device (which sw device and
doesn't grab instance lock) and from REGISTER/UNREGISTER notifiers.
We already hold the instance lock for REGISTER notifier during
netns change and we'll soon hold the lock during other paths.
Reported-by: Cosmin Ratiu <cratiu@nvidia.com>
Fixes: ad7c7b2172c3 ("net: hold netdev instance lock during sysfs operations")
Signed-off-by: Stanislav Fomichev <sdf@fomichev.me>
---
net/core/dev.c | 1 +
net/ipv4/devinet.c | 2 +-
2 files changed, 2 insertions(+), 1 deletion(-)
diff --git a/net/core/dev.c b/net/core/dev.c
index be17e0660144..80523f75ee6b 100644
--- a/net/core/dev.c
+++ b/net/core/dev.c
@@ -1771,6 +1771,7 @@ void netif_disable_lro(struct net_device *dev)
netdev_unlock_ops(lower_dev);
}
}
+EXPORT_SYMBOL(netif_disable_lro);
/**
* dev_disable_gro_hw - disable HW Generic Receive Offload on a device
diff --git a/net/ipv4/devinet.c b/net/ipv4/devinet.c
index 754f60fb6e25..77e5705ac799 100644
--- a/net/ipv4/devinet.c
+++ b/net/ipv4/devinet.c
@@ -281,7 +281,7 @@ static struct in_device *inetdev_init(struct net_device *dev)
if (!in_dev->arp_parms)
goto out_kfree;
if (IPV4_DEVCONF(in_dev->cnf, FORWARDING))
- dev_disable_lro(dev);
+ netif_disable_lro(dev);
/* Reference in_dev->dev */
netdev_hold(dev, &in_dev->dev_tracker, GFP_KERNEL);
/* Account for reference dev->ip_ptr (below) */
--
2.48.1
^ permalink raw reply related [flat|nested] 38+ messages in thread
* [PATCH net v2 02/11] net: hold instance lock during NETDEV_REGISTER/UP/UNREGISTER
2025-03-27 13:56 [PATCH net v2 00/11] net: hold instance lock during NETDEV_UP/REGISTER/UNREGISTER Stanislav Fomichev
2025-03-27 13:56 ` [PATCH net v2 01/11] net: switch to netif_disable_lro in inetdev_init Stanislav Fomichev
@ 2025-03-27 13:56 ` Stanislav Fomichev
2025-03-27 18:58 ` Jakub Kicinski
2025-03-27 13:56 ` [PATCH net v2 03/11] net: use netif_disable_lro in ipv6_add_dev Stanislav Fomichev
` (9 subsequent siblings)
11 siblings, 1 reply; 38+ messages in thread
From: Stanislav Fomichev @ 2025-03-27 13:56 UTC (permalink / raw)
To: netdev; +Cc: davem, edumazet, kuba, pabeni, Cosmin Ratiu
Callers of inetdev_init can come from several places with inconsistent
expectation about netdev instance lock. Grab instance lock during
REGISTER (plus UP) and UNREGISTER netdev notifiers.
Take extra care in the path that re-registers the notifiers during
net namespace move (all the dance with extra 'lock' argument).
WARNING: CPU: 10 PID: 1479 at ./include/net/netdev_lock.h:54
__netdev_update_features+0x65f/0xca0
__warn+0x81/0x180
__netdev_update_features+0x65f/0xca0
report_bug+0x156/0x180
handle_bug+0x4f/0x90
exc_invalid_op+0x13/0x60
asm_exc_invalid_op+0x16/0x20
__netdev_update_features+0x65f/0xca0
netif_disable_lro+0x30/0x1d0
inetdev_init+0x12f/0x1f0
inetdev_event+0x48b/0x870
notifier_call_chain+0x38/0xf0
register_netdevice+0x741/0x8b0
register_netdev+0x1f/0x40
mlx5e_probe+0x4e3/0x8e0 [mlx5_core]
auxiliary_bus_probe+0x3f/0x90
really_probe+0xc3/0x3a0
__driver_probe_device+0x80/0x150
driver_probe_device+0x1f/0x90
__device_attach_driver+0x7d/0x100
bus_for_each_drv+0x80/0xd0
__device_attach+0xb4/0x1c0
bus_probe_device+0x91/0xa0
device_add+0x657/0x870
Reported-by: Cosmin Ratiu <cratiu@nvidia.com>
Fixes: ad7c7b2172c3 ("net: hold netdev instance lock during sysfs operations")
Signed-off-by: Stanislav Fomichev <sdf@fomichev.me>
---
net/core/dev.c | 66 ++++++++++++++++++++++++++++++++++----------------
1 file changed, 45 insertions(+), 21 deletions(-)
diff --git a/net/core/dev.c b/net/core/dev.c
index 80523f75ee6b..019f838f94d8 100644
--- a/net/core/dev.c
+++ b/net/core/dev.c
@@ -1829,6 +1829,8 @@ static int call_netdevice_register_notifiers(struct notifier_block *nb,
{
int err;
+ netdev_ops_assert_locked(dev);
+
err = call_netdevice_notifier(nb, NETDEV_REGISTER, dev);
err = notifier_to_errno(err);
if (err)
@@ -1842,24 +1844,34 @@ static int call_netdevice_register_notifiers(struct notifier_block *nb,
}
static void call_netdevice_unregister_notifiers(struct notifier_block *nb,
- struct net_device *dev)
+ struct net_device *dev,
+ struct net_device *locked)
{
if (dev->flags & IFF_UP) {
call_netdevice_notifier(nb, NETDEV_GOING_DOWN,
dev);
call_netdevice_notifier(nb, NETDEV_DOWN, dev);
}
+ if (dev != locked)
+ netdev_lock_ops(dev);
call_netdevice_notifier(nb, NETDEV_UNREGISTER, dev);
+ if (dev != locked)
+ netdev_unlock_ops(dev);
}
static int call_netdevice_register_net_notifiers(struct notifier_block *nb,
- struct net *net)
+ struct net *net,
+ struct net_device *locked)
{
struct net_device *dev;
int err;
for_each_netdev(net, dev) {
+ if (locked != dev)
+ netdev_lock_ops(dev);
err = call_netdevice_register_notifiers(nb, dev);
+ if (locked != dev)
+ netdev_unlock_ops(dev);
if (err)
goto rollback;
}
@@ -1867,17 +1879,18 @@ static int call_netdevice_register_net_notifiers(struct notifier_block *nb,
rollback:
for_each_netdev_continue_reverse(net, dev)
- call_netdevice_unregister_notifiers(nb, dev);
+ call_netdevice_unregister_notifiers(nb, dev, locked);
return err;
}
static void call_netdevice_unregister_net_notifiers(struct notifier_block *nb,
- struct net *net)
+ struct net *net,
+ struct net_device *locked)
{
struct net_device *dev;
for_each_netdev(net, dev)
- call_netdevice_unregister_notifiers(nb, dev);
+ call_netdevice_unregister_notifiers(nb, dev, locked);
}
static int dev_boot_phase = 1;
@@ -1914,7 +1927,7 @@ int register_netdevice_notifier(struct notifier_block *nb)
goto unlock;
for_each_net(net) {
__rtnl_net_lock(net);
- err = call_netdevice_register_net_notifiers(nb, net);
+ err = call_netdevice_register_net_notifiers(nb, net, NULL);
__rtnl_net_unlock(net);
if (err)
goto rollback;
@@ -1928,7 +1941,7 @@ int register_netdevice_notifier(struct notifier_block *nb)
rollback:
for_each_net_continue_reverse(net) {
__rtnl_net_lock(net);
- call_netdevice_unregister_net_notifiers(nb, net);
+ call_netdevice_unregister_net_notifiers(nb, net, NULL);
__rtnl_net_unlock(net);
}
@@ -1965,7 +1978,7 @@ int unregister_netdevice_notifier(struct notifier_block *nb)
for_each_net(net) {
__rtnl_net_lock(net);
- call_netdevice_unregister_net_notifiers(nb, net);
+ call_netdevice_unregister_net_notifiers(nb, net, NULL);
__rtnl_net_unlock(net);
}
@@ -1978,7 +1991,8 @@ EXPORT_SYMBOL(unregister_netdevice_notifier);
static int __register_netdevice_notifier_net(struct net *net,
struct notifier_block *nb,
- bool ignore_call_fail)
+ bool ignore_call_fail,
+ struct net_device *locked)
{
int err;
@@ -1988,7 +2002,7 @@ static int __register_netdevice_notifier_net(struct net *net,
if (dev_boot_phase)
return 0;
- err = call_netdevice_register_net_notifiers(nb, net);
+ err = call_netdevice_register_net_notifiers(nb, net, locked);
if (err && !ignore_call_fail)
goto chain_unregister;
@@ -2000,7 +2014,8 @@ static int __register_netdevice_notifier_net(struct net *net,
}
static int __unregister_netdevice_notifier_net(struct net *net,
- struct notifier_block *nb)
+ struct notifier_block *nb,
+ struct net_device *locked)
{
int err;
@@ -2008,7 +2023,7 @@ static int __unregister_netdevice_notifier_net(struct net *net,
if (err)
return err;
- call_netdevice_unregister_net_notifiers(nb, net);
+ call_netdevice_unregister_net_notifiers(nb, net, locked);
return 0;
}
@@ -2032,7 +2047,7 @@ int register_netdevice_notifier_net(struct net *net, struct notifier_block *nb)
int err;
rtnl_net_lock(net);
- err = __register_netdevice_notifier_net(net, nb, false);
+ err = __register_netdevice_notifier_net(net, nb, false, NULL);
rtnl_net_unlock(net);
return err;
@@ -2061,7 +2076,7 @@ int unregister_netdevice_notifier_net(struct net *net,
int err;
rtnl_net_lock(net);
- err = __unregister_netdevice_notifier_net(net, nb);
+ err = __unregister_netdevice_notifier_net(net, nb, NULL);
rtnl_net_unlock(net);
return err;
@@ -2070,10 +2085,11 @@ EXPORT_SYMBOL(unregister_netdevice_notifier_net);
static void __move_netdevice_notifier_net(struct net *src_net,
struct net *dst_net,
- struct notifier_block *nb)
+ struct notifier_block *nb,
+ struct net_device *locked)
{
- __unregister_netdevice_notifier_net(src_net, nb);
- __register_netdevice_notifier_net(dst_net, nb, true);
+ __unregister_netdevice_notifier_net(src_net, nb, locked);
+ __register_netdevice_notifier_net(dst_net, nb, true, locked);
}
static void rtnl_net_dev_lock(struct net_device *dev)
@@ -2119,7 +2135,7 @@ int register_netdevice_notifier_dev_net(struct net_device *dev,
int err;
rtnl_net_dev_lock(dev);
- err = __register_netdevice_notifier_net(dev_net(dev), nb, false);
+ err = __register_netdevice_notifier_net(dev_net(dev), nb, false, NULL);
if (!err) {
nn->nb = nb;
list_add(&nn->list, &dev->net_notifier_list);
@@ -2138,7 +2154,7 @@ int unregister_netdevice_notifier_dev_net(struct net_device *dev,
rtnl_net_dev_lock(dev);
list_del(&nn->list);
- err = __unregister_netdevice_notifier_net(dev_net(dev), nb);
+ err = __unregister_netdevice_notifier_net(dev_net(dev), nb, NULL);
rtnl_net_dev_unlock(dev);
return err;
@@ -2151,7 +2167,7 @@ static void move_netdevice_notifiers_dev_net(struct net_device *dev,
struct netdev_net_notifier *nn;
list_for_each_entry(nn, &dev->net_notifier_list, list)
- __move_netdevice_notifier_net(dev_net(dev), net, nn->nb);
+ __move_netdevice_notifier_net(dev_net(dev), net, nn->nb, dev);
}
/**
@@ -11046,7 +11062,9 @@ int register_netdevice(struct net_device *dev)
memcpy(dev->perm_addr, dev->dev_addr, dev->addr_len);
/* Notify protocols, that a new device appeared. */
+ netdev_lock_ops(dev);
ret = call_netdevice_notifiers(NETDEV_REGISTER, dev);
+ netdev_unlock_ops(dev);
ret = notifier_to_errno(ret);
if (ret) {
/* Expect explicit free_netdev() on failure */
@@ -11179,8 +11197,11 @@ static struct net_device *netdev_wait_allrefs_any(struct list_head *list)
rtnl_lock();
/* Rebroadcast unregister notification */
- list_for_each_entry(dev, list, todo_list)
+ list_for_each_entry(dev, list, todo_list) {
+ netdev_lock_ops(dev);
call_netdevice_notifiers(NETDEV_UNREGISTER, dev);
+ netdev_unlock_ops(dev);
+ }
__rtnl_unlock();
rcu_barrier();
@@ -11971,7 +11992,9 @@ void unregister_netdevice_many_notify(struct list_head *head,
/* Notify protocols, that we are about to destroy
* this device. They should clean all the things.
*/
+ netdev_lock_ops(dev);
call_netdevice_notifiers(NETDEV_UNREGISTER, dev);
+ netdev_unlock_ops(dev);
if (!dev->rtnl_link_ops ||
dev->rtnl_link_state == RTNL_LINK_INITIALIZED)
@@ -12068,6 +12091,7 @@ int netif_change_net_namespace(struct net_device *dev, struct net *net,
int err, new_nsid;
ASSERT_RTNL();
+ netdev_ops_assert_locked(dev);
/* Don't allow namespace local devices to be moved. */
err = -EINVAL;
--
2.48.1
^ permalink raw reply related [flat|nested] 38+ messages in thread
* [PATCH net v2 03/11] net: use netif_disable_lro in ipv6_add_dev
2025-03-27 13:56 [PATCH net v2 00/11] net: hold instance lock during NETDEV_UP/REGISTER/UNREGISTER Stanislav Fomichev
2025-03-27 13:56 ` [PATCH net v2 01/11] net: switch to netif_disable_lro in inetdev_init Stanislav Fomichev
2025-03-27 13:56 ` [PATCH net v2 02/11] net: hold instance lock during NETDEV_REGISTER/UP/UNREGISTER Stanislav Fomichev
@ 2025-03-27 13:56 ` Stanislav Fomichev
2025-03-27 19:02 ` Jakub Kicinski
2025-03-27 13:56 ` [PATCH net v2 04/11] net: release instance lock during NETDEV_UNREGISTER for bond/team Stanislav Fomichev
` (8 subsequent siblings)
11 siblings, 1 reply; 38+ messages in thread
From: Stanislav Fomichev @ 2025-03-27 13:56 UTC (permalink / raw)
To: netdev; +Cc: davem, edumazet, kuba, pabeni, Cosmin Ratiu
ipv6_add_dev might call dev_disable_lro which unconditionally grabs
instance lock, so it will deadlock during NETDEV_REGISTER. Switch
to netif_disable_lro.
Make sure all callers hold the instance lock as well.
Cc: Cosmin Ratiu <cratiu@nvidia.com>
Fixes: ad7c7b2172c3 ("net: hold netdev instance lock during sysfs operations")
Signed-off-by: Stanislav Fomichev <sdf@fomichev.me>
---
include/linux/netdevice.h | 1 +
net/core/dev.c | 1 +
net/core/dev.h | 1 -
net/ipv6/addrconf.c | 17 +++++++++++++----
4 files changed, 15 insertions(+), 5 deletions(-)
diff --git a/include/linux/netdevice.h b/include/linux/netdevice.h
index fa79145518d1..b2b4e31806d5 100644
--- a/include/linux/netdevice.h
+++ b/include/linux/netdevice.h
@@ -3386,6 +3386,7 @@ struct net_device *dev_get_by_index(struct net *net, int ifindex);
struct net_device *__dev_get_by_index(struct net *net, int ifindex);
struct net_device *netdev_get_by_index(struct net *net, int ifindex,
netdevice_tracker *tracker, gfp_t gfp);
+struct net_device *netdev_get_by_index_lock(struct net *net, int ifindex);
struct net_device *netdev_get_by_name(struct net *net, const char *name,
netdevice_tracker *tracker, gfp_t gfp);
struct net_device *dev_get_by_index_rcu(struct net *net, int ifindex);
diff --git a/net/core/dev.c b/net/core/dev.c
index 019f838f94d8..bb4a135b1569 100644
--- a/net/core/dev.c
+++ b/net/core/dev.c
@@ -1072,6 +1072,7 @@ struct net_device *netdev_get_by_index_lock(struct net *net, int ifindex)
return __netdev_put_lock(dev);
}
+EXPORT_SYMBOL(netdev_get_by_index_lock);
struct net_device *
netdev_xa_find_lock(struct net *net, struct net_device *dev,
diff --git a/net/core/dev.h b/net/core/dev.h
index 7ee203395d8e..8d35860f2e89 100644
--- a/net/core/dev.h
+++ b/net/core/dev.h
@@ -28,7 +28,6 @@ struct napi_struct *
netdev_napi_by_id_lock(struct net *net, unsigned int napi_id);
struct net_device *dev_get_by_napi_id(unsigned int napi_id);
-struct net_device *netdev_get_by_index_lock(struct net *net, int ifindex);
struct net_device *__netdev_put_lock(struct net_device *dev);
struct net_device *
netdev_xa_find_lock(struct net *net, struct net_device *dev,
diff --git a/net/ipv6/addrconf.c b/net/ipv6/addrconf.c
index ac8cc1076536..665184d2adce 100644
--- a/net/ipv6/addrconf.c
+++ b/net/ipv6/addrconf.c
@@ -80,6 +80,7 @@
#include <net/netlink.h>
#include <net/pkt_sched.h>
#include <net/l3mdev.h>
+#include <net/netdev_lock.h>
#include <linux/if_tunnel.h>
#include <linux/rtnetlink.h>
#include <linux/netconf.h>
@@ -377,6 +378,7 @@ static struct inet6_dev *ipv6_add_dev(struct net_device *dev)
int err = -ENOMEM;
ASSERT_RTNL();
+ netdev_ops_assert_locked(dev);
if (dev->mtu < IPV6_MIN_MTU && dev != blackhole_netdev)
return ERR_PTR(-EINVAL);
@@ -402,7 +404,7 @@ static struct inet6_dev *ipv6_add_dev(struct net_device *dev)
return ERR_PTR(err);
}
if (ndev->cnf.forwarding)
- dev_disable_lro(dev);
+ netif_disable_lro(dev);
/* We refer to the device */
netdev_hold(dev, &ndev->dev_tracker, GFP_KERNEL);
@@ -3151,11 +3153,12 @@ int addrconf_add_ifaddr(struct net *net, void __user *arg)
cfg.plen = ireq.ifr6_prefixlen;
rtnl_net_lock(net);
- dev = __dev_get_by_index(net, ireq.ifr6_ifindex);
+ dev = netdev_get_by_index_lock(net, ireq.ifr6_ifindex);
if (dev)
err = inet6_addr_add(net, dev, &cfg, 0, 0, NULL);
else
err = -ENODEV;
+ netdev_unlock(dev);
rtnl_net_unlock(net);
return err;
}
@@ -5022,11 +5025,11 @@ inet6_rtm_newaddr(struct sk_buff *skb, struct nlmsghdr *nlh,
rtnl_net_lock(net);
- dev = __dev_get_by_index(net, ifm->ifa_index);
+ dev = netdev_get_by_index_lock(net, ifm->ifa_index);
if (!dev) {
NL_SET_ERR_MSG_MOD(extack, "Unable to find the interface");
err = -ENODEV;
- goto unlock;
+ goto unlock_rtnl;
}
idev = ipv6_find_idev(dev);
@@ -5065,6 +5068,8 @@ inet6_rtm_newaddr(struct sk_buff *skb, struct nlmsghdr *nlh,
in6_ifa_put(ifa);
unlock:
+ netdev_unlock(dev);
+unlock_rtnl:
rtnl_net_unlock(net);
return err;
@@ -6503,7 +6508,9 @@ static int addrconf_sysctl_addr_gen_mode(const struct ctl_table *ctl, int write,
if (idev->cnf.addr_gen_mode != new_val) {
WRITE_ONCE(idev->cnf.addr_gen_mode, new_val);
+ netdev_lock_ops(idev->dev);
addrconf_init_auto_addrs(idev->dev);
+ netdev_unlock_ops(idev->dev);
}
} else if (&net->ipv6.devconf_all->addr_gen_mode == ctl->data) {
struct net_device *dev;
@@ -6515,7 +6522,9 @@ static int addrconf_sysctl_addr_gen_mode(const struct ctl_table *ctl, int write,
idev->cnf.addr_gen_mode != new_val) {
WRITE_ONCE(idev->cnf.addr_gen_mode,
new_val);
+ netdev_lock_ops(idev->dev);
addrconf_init_auto_addrs(idev->dev);
+ netdev_unlock_ops(idev->dev);
}
}
}
--
2.48.1
^ permalink raw reply related [flat|nested] 38+ messages in thread
* [PATCH net v2 04/11] net: release instance lock during NETDEV_UNREGISTER for bond/team
2025-03-27 13:56 [PATCH net v2 00/11] net: hold instance lock during NETDEV_UP/REGISTER/UNREGISTER Stanislav Fomichev
` (2 preceding siblings ...)
2025-03-27 13:56 ` [PATCH net v2 03/11] net: use netif_disable_lro in ipv6_add_dev Stanislav Fomichev
@ 2025-03-27 13:56 ` Stanislav Fomichev
2025-03-27 13:56 ` [PATCH net v2 05/11] net/mlx5e: use netdev_lockdep_set_classes Stanislav Fomichev
` (7 subsequent siblings)
11 siblings, 0 replies; 38+ messages in thread
From: Stanislav Fomichev @ 2025-03-27 13:56 UTC (permalink / raw)
To: netdev; +Cc: davem, edumazet, kuba, pabeni, Taehee Yoo
Running NETDEV_UNREGISTER under instance lock might be problematic for
teaming/bonding [0] because they take their own lock and the ordering
is reverse in the notifiers path. Release the instance lock in the notifiers
and let the existing code paths take the lock in the correct
order.
0: https://lore.kernel.org/netdev/CAMArcTW+5Lk0EWCaHOsUhf+p31S8yAZyQvi3C8zeRF3TxnC9Fg@mail.gmail.com/
Reported-by: Taehee Yoo <ap420073@gmail.com>
Signed-off-by: Stanislav Fomichev <sdf@fomichev.me>
---
drivers/net/bonding/bond_main.c | 2 ++
drivers/net/team/team_core.c | 2 ++
2 files changed, 4 insertions(+)
diff --git a/drivers/net/bonding/bond_main.c b/drivers/net/bonding/bond_main.c
index 950d8e4d86f8..82f887adb33b 100644
--- a/drivers/net/bonding/bond_main.c
+++ b/drivers/net/bonding/bond_main.c
@@ -4022,10 +4022,12 @@ static int bond_slave_netdev_event(unsigned long event,
switch (event) {
case NETDEV_UNREGISTER:
+ netdev_unlock_ops(slave_dev);
if (bond_dev->type != ARPHRD_ETHER)
bond_release_and_destroy(bond_dev, slave_dev);
else
__bond_release_one(bond_dev, slave_dev, false, true);
+ netdev_lock_ops(slave_dev);
break;
case NETDEV_UP:
case NETDEV_CHANGE:
diff --git a/drivers/net/team/team_core.c b/drivers/net/team/team_core.c
index d8fc0c79745d..4a1815f50015 100644
--- a/drivers/net/team/team_core.c
+++ b/drivers/net/team/team_core.c
@@ -2997,7 +2997,9 @@ static int team_device_event(struct notifier_block *unused,
!!netif_oper_up(port->dev));
break;
case NETDEV_UNREGISTER:
+ netdev_unlock_ops(dev);
team_del_slave(port->team->dev, dev);
+ netdev_lock_ops(dev);
break;
case NETDEV_FEAT_CHANGE:
if (!port->team->notifier_ctx) {
--
2.48.1
^ permalink raw reply related [flat|nested] 38+ messages in thread
* [PATCH net v2 05/11] net/mlx5e: use netdev_lockdep_set_classes
2025-03-27 13:56 [PATCH net v2 00/11] net: hold instance lock during NETDEV_UP/REGISTER/UNREGISTER Stanislav Fomichev
` (3 preceding siblings ...)
2025-03-27 13:56 ` [PATCH net v2 04/11] net: release instance lock during NETDEV_UNREGISTER for bond/team Stanislav Fomichev
@ 2025-03-27 13:56 ` Stanislav Fomichev
2025-03-27 19:08 ` Jakub Kicinski
2025-03-27 13:56 ` [PATCH net v2 06/11] netdevsim: add dummy device notifiers Stanislav Fomichev
` (6 subsequent siblings)
11 siblings, 1 reply; 38+ messages in thread
From: Stanislav Fomichev @ 2025-03-27 13:56 UTC (permalink / raw)
To: netdev; +Cc: davem, edumazet, kuba, pabeni, Cosmin Ratiu
Cosmin reports a potential recursive lock warning in [0]. mlx5 is
using register_netdevice_notifier_dev_net which might result in
iteration over entire netns which triggers lock ordering issues.
We know that lower devices are independent, so it's save to
suppress the lockdep.
0: https://lore.kernel.org/netdev/672305efd02d3d29520f49a1c18e2f4da6e90902.camel@nvidia.com/
Reported-by: Cosmin Ratiu <cratiu@nvidia.com>
Signed-off-by: Stanislav Fomichev <sdf@fomichev.me>
---
drivers/net/ethernet/mellanox/mlx5/core/en_main.c | 2 ++
1 file changed, 2 insertions(+)
diff --git a/drivers/net/ethernet/mellanox/mlx5/core/en_main.c b/drivers/net/ethernet/mellanox/mlx5/core/en_main.c
index 3506024c2453..e3d8d6c9bf03 100644
--- a/drivers/net/ethernet/mellanox/mlx5/core/en_main.c
+++ b/drivers/net/ethernet/mellanox/mlx5/core/en_main.c
@@ -40,6 +40,7 @@
#include <linux/if_bridge.h>
#include <linux/filter.h>
#include <net/netdev_queues.h>
+#include <net/netdev_lock.h>
#include <net/page_pool/types.h>
#include <net/pkt_sched.h>
#include <net/xdp_sock_drv.h>
@@ -5454,6 +5455,7 @@ static void mlx5e_build_nic_netdev(struct net_device *netdev)
netdev->netdev_ops = &mlx5e_netdev_ops;
netdev->xdp_metadata_ops = &mlx5e_xdp_metadata_ops;
netdev->xsk_tx_metadata_ops = &mlx5e_xsk_tx_metadata_ops;
+ netdev_lockdep_set_classes(netdev);
mlx5e_dcbnl_build_netdev(netdev);
--
2.48.1
^ permalink raw reply related [flat|nested] 38+ messages in thread
* [PATCH net v2 06/11] netdevsim: add dummy device notifiers
2025-03-27 13:56 [PATCH net v2 00/11] net: hold instance lock during NETDEV_UP/REGISTER/UNREGISTER Stanislav Fomichev
` (4 preceding siblings ...)
2025-03-27 13:56 ` [PATCH net v2 05/11] net/mlx5e: use netdev_lockdep_set_classes Stanislav Fomichev
@ 2025-03-27 13:56 ` Stanislav Fomichev
2025-03-27 19:12 ` Jakub Kicinski
2025-03-27 13:56 ` [PATCH net v2 07/11] net: dummy: request ops lock Stanislav Fomichev
` (5 subsequent siblings)
11 siblings, 1 reply; 38+ messages in thread
From: Stanislav Fomichev @ 2025-03-27 13:56 UTC (permalink / raw)
To: netdev; +Cc: davem, edumazet, kuba, pabeni
In order to exercise and verify notifiers' locking assumptions,
register dummy notifiers and assert that netdev is ops locked
for REGISTER/UNREGISTER/UP.
Signed-off-by: Stanislav Fomichev <sdf@fomichev.me>
---
drivers/net/netdevsim/netdev.c | 58 +++++++++++++++++++++++++++++++
drivers/net/netdevsim/netdevsim.h | 3 ++
2 files changed, 61 insertions(+)
diff --git a/drivers/net/netdevsim/netdev.c b/drivers/net/netdevsim/netdev.c
index b67af4651185..fdf10dd3df0b 100644
--- a/drivers/net/netdevsim/netdev.c
+++ b/drivers/net/netdevsim/netdev.c
@@ -926,6 +926,24 @@ static void nsim_queue_uninit(struct netdevsim *ns)
ns->rq = NULL;
}
+static int nsim_net_event(struct notifier_block *this, unsigned long event,
+ void *ptr)
+{
+ struct net_device *dev = netdev_notifier_info_to_dev(ptr);
+
+ switch (event) {
+ case NETDEV_REGISTER:
+ case NETDEV_UNREGISTER:
+ case NETDEV_UP:
+ netdev_ops_assert_locked(dev);
+ break;
+ default:
+ break;
+ }
+
+ return NOTIFY_DONE;
+}
+
static int nsim_init_netdevsim(struct netdevsim *ns)
{
struct mock_phc *phc;
@@ -939,6 +957,7 @@ static int nsim_init_netdevsim(struct netdevsim *ns)
ns->netdev->netdev_ops = &nsim_netdev_ops;
ns->netdev->stat_ops = &nsim_stat_ops;
ns->netdev->queue_mgmt_ops = &nsim_queue_mgmt_ops;
+ netdev_lockdep_set_classes(ns->netdev);
err = nsim_udp_tunnels_info_create(ns->nsim_dev, ns->netdev);
if (err)
@@ -959,7 +978,13 @@ static int nsim_init_netdevsim(struct netdevsim *ns)
err = register_netdevice(ns->netdev);
if (err)
goto err_ipsec_teardown;
+
rtnl_unlock();
+
+ ns->nb.notifier_call = nsim_net_event;
+ if (register_netdevice_notifier_dev_net(ns->netdev, &ns->nb, &ns->nn))
+ ns->nb.notifier_call = NULL;
+
return 0;
err_ipsec_teardown:
@@ -1043,6 +1068,10 @@ void nsim_destroy(struct netdevsim *ns)
debugfs_remove(ns->qr_dfs);
debugfs_remove(ns->pp_dfs);
+ if (ns->nb.notifier_call)
+ unregister_netdevice_notifier_dev_net(ns->netdev, &ns->nb,
+ &ns->nn);
+
rtnl_lock();
peer = rtnl_dereference(ns->peer);
if (peer)
@@ -1086,6 +1115,28 @@ static struct rtnl_link_ops nsim_link_ops __read_mostly = {
.validate = nsim_validate,
};
+static int nsim_device_event(struct notifier_block *this, unsigned long event,
+ void *ptr)
+{
+ struct net_device *dev = netdev_notifier_info_to_dev(ptr);
+
+ switch (event) {
+ case NETDEV_REGISTER:
+ case NETDEV_UNREGISTER:
+ case NETDEV_UP:
+ netdev_ops_assert_locked(dev);
+ break;
+ default:
+ break;
+ }
+
+ return NOTIFY_DONE;
+}
+
+static struct notifier_block nsim_notifier = {
+ .notifier_call = nsim_device_event,
+};
+
static int __init nsim_module_init(void)
{
int err;
@@ -1102,8 +1153,14 @@ static int __init nsim_module_init(void)
if (err)
goto err_bus_exit;
+ err = register_netdevice_notifier(&nsim_notifier);
+ if (err)
+ goto err_notifier_exit;
+
return 0;
+err_notifier_exit:
+ rtnl_link_unregister(&nsim_link_ops);
err_bus_exit:
nsim_bus_exit();
err_dev_exit:
@@ -1113,6 +1170,7 @@ static int __init nsim_module_init(void)
static void __exit nsim_module_exit(void)
{
+ unregister_netdevice_notifier(&nsim_notifier);
rtnl_link_unregister(&nsim_link_ops);
nsim_bus_exit();
nsim_dev_exit();
diff --git a/drivers/net/netdevsim/netdevsim.h b/drivers/net/netdevsim/netdevsim.h
index 665020d18f29..d04401f0bdf7 100644
--- a/drivers/net/netdevsim/netdevsim.h
+++ b/drivers/net/netdevsim/netdevsim.h
@@ -144,6 +144,9 @@ struct netdevsim {
struct nsim_ethtool ethtool;
struct netdevsim __rcu *peer;
+
+ struct notifier_block nb;
+ struct netdev_net_notifier nn;
};
struct netdevsim *
--
2.48.1
^ permalink raw reply related [flat|nested] 38+ messages in thread
* [PATCH net v2 07/11] net: dummy: request ops lock
2025-03-27 13:56 [PATCH net v2 00/11] net: hold instance lock during NETDEV_UP/REGISTER/UNREGISTER Stanislav Fomichev
` (5 preceding siblings ...)
2025-03-27 13:56 ` [PATCH net v2 06/11] netdevsim: add dummy device notifiers Stanislav Fomichev
@ 2025-03-27 13:56 ` Stanislav Fomichev
2025-03-27 13:56 ` [PATCH net v2 08/11] docs: net: document netdev notifier expectations Stanislav Fomichev
` (4 subsequent siblings)
11 siblings, 0 replies; 38+ messages in thread
From: Stanislav Fomichev @ 2025-03-27 13:56 UTC (permalink / raw)
To: netdev; +Cc: davem, edumazet, kuba, pabeni
Even though dummy device doesn't really need an instance lock,
a lot of selftests use dummy so it's useful to have extra
expose to the instance lock on NIPA. Request the instance/ops
locking.
Signed-off-by: Stanislav Fomichev <sdf@fomichev.me>
---
drivers/net/dummy.c | 1 +
1 file changed, 1 insertion(+)
diff --git a/drivers/net/dummy.c b/drivers/net/dummy.c
index a4938c6a5ebb..d6bdad4baadd 100644
--- a/drivers/net/dummy.c
+++ b/drivers/net/dummy.c
@@ -105,6 +105,7 @@ static void dummy_setup(struct net_device *dev)
dev->netdev_ops = &dummy_netdev_ops;
dev->ethtool_ops = &dummy_ethtool_ops;
dev->needs_free_netdev = true;
+ dev->request_ops_lock = true;
/* Fill in device structure with ethernet-generic values. */
dev->flags |= IFF_NOARP;
--
2.48.1
^ permalink raw reply related [flat|nested] 38+ messages in thread
* [PATCH net v2 08/11] docs: net: document netdev notifier expectations
2025-03-27 13:56 [PATCH net v2 00/11] net: hold instance lock during NETDEV_UP/REGISTER/UNREGISTER Stanislav Fomichev
` (6 preceding siblings ...)
2025-03-27 13:56 ` [PATCH net v2 07/11] net: dummy: request ops lock Stanislav Fomichev
@ 2025-03-27 13:56 ` Stanislav Fomichev
2025-03-27 19:16 ` Jakub Kicinski
2025-03-27 13:56 ` [PATCH net v2 09/11] net: designate XSK pool pointers in queues as "ops protected" Stanislav Fomichev
` (3 subsequent siblings)
11 siblings, 1 reply; 38+ messages in thread
From: Stanislav Fomichev @ 2025-03-27 13:56 UTC (permalink / raw)
To: netdev; +Cc: davem, edumazet, kuba, pabeni
We don't have a consistent state yet, but document where we think
we are and where we wanna be.
Signed-off-by: Stanislav Fomichev <sdf@fomichev.me>
---
Documentation/networking/netdevices.rst | 18 ++++++++++++++++++
1 file changed, 18 insertions(+)
diff --git a/Documentation/networking/netdevices.rst b/Documentation/networking/netdevices.rst
index ebb868f50ac2..89337cfec36e 100644
--- a/Documentation/networking/netdevices.rst
+++ b/Documentation/networking/netdevices.rst
@@ -343,6 +343,24 @@ there are two sets of interfaces: ``dev_xxx`` and ``netif_xxx`` (e.g.,
acquiring the instance lock themselves, while the ``netif_xxx`` functions
assume that the driver has already acquired the instance lock.
+Notifiers and netdev instance lock
+==================================
+
+For device drivers that implement shaping or queue management APIs,
+some of the notifiers (``enum netdev_cmd``) are running under the netdev
+instance lock.
+
+Currently only the following notifiers are running under the instance lock:
+* ``NETDEV_REGISTER``
+* ``NETDEV_UP``
+* ``NETDEV_UNREGISTER``
+
+There are no clear expectations for the remaining notifiers. Notifiers not on
+the list may run with or without the instance lock, potentially even invoking
+the same notifier type with and without the lock from different code paths.
+The goal is to eventually ensure that all (or most, with a few documented
+exceptions) notifiers run under the instance lock.
+
NETDEV_INTERNAL symbol namespace
================================
--
2.48.1
^ permalink raw reply related [flat|nested] 38+ messages in thread
* [PATCH net v2 09/11] net: designate XSK pool pointers in queues as "ops protected"
2025-03-27 13:56 [PATCH net v2 00/11] net: hold instance lock during NETDEV_UP/REGISTER/UNREGISTER Stanislav Fomichev
` (7 preceding siblings ...)
2025-03-27 13:56 ` [PATCH net v2 08/11] docs: net: document netdev notifier expectations Stanislav Fomichev
@ 2025-03-27 13:56 ` Stanislav Fomichev
2025-03-27 13:56 ` [PATCH net v2 10/11] netdev: add "ops compat locking" helpers Stanislav Fomichev
` (2 subsequent siblings)
11 siblings, 0 replies; 38+ messages in thread
From: Stanislav Fomichev @ 2025-03-27 13:56 UTC (permalink / raw)
To: netdev; +Cc: davem, edumazet, kuba, pabeni
From: Jakub Kicinski <kuba@kernel.org>
Read accesses go via xsk_get_pool_from_qid(), the call coming
from the core and gve look safe (other "ops locked" drivers
don't support XSK).
Write accesses go via xsk_reg_pool_at_qid() and xsk_clear_pool_at_qid().
Former is already under the ops lock, latter needs to be locked when
coming from the workqueue via xp_clear_dev().
Acked-by: Stanislav Fomichev <sdf@fomichev.me>
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
Signed-off-by: Stanislav Fomichev <sdf@fomichev.me>
---
include/linux/netdevice.h | 1 +
include/net/netdev_rx_queue.h | 6 +++---
net/xdp/xsk_buff_pool.c | 7 ++++++-
3 files changed, 10 insertions(+), 4 deletions(-)
diff --git a/include/linux/netdevice.h b/include/linux/netdevice.h
index b2b4e31806d5..b3d1c1922ec0 100644
--- a/include/linux/netdevice.h
+++ b/include/linux/netdevice.h
@@ -688,6 +688,7 @@ struct netdev_queue {
/* Subordinate device that the queue has been assigned to */
struct net_device *sb_dev;
#ifdef CONFIG_XDP_SOCKETS
+ /* "ops protected", see comment about net_device::lock */
struct xsk_buff_pool *pool;
#endif
diff --git a/include/net/netdev_rx_queue.h b/include/net/netdev_rx_queue.h
index b2238b551dce..8cdcd138b33f 100644
--- a/include/net/netdev_rx_queue.h
+++ b/include/net/netdev_rx_queue.h
@@ -20,12 +20,12 @@ struct netdev_rx_queue {
struct net_device *dev;
netdevice_tracker dev_tracker;
+ /* All fields below are "ops protected",
+ * see comment about net_device::lock
+ */
#ifdef CONFIG_XDP_SOCKETS
struct xsk_buff_pool *pool;
#endif
- /* NAPI instance for the queue
- * "ops protected", see comment about net_device::lock
- */
struct napi_struct *napi;
struct pp_memory_provider_params mp_params;
} ____cacheline_aligned_in_smp;
diff --git a/net/xdp/xsk_buff_pool.c b/net/xdp/xsk_buff_pool.c
index 25a76c5ce0f1..c7e50fd86c6a 100644
--- a/net/xdp/xsk_buff_pool.c
+++ b/net/xdp/xsk_buff_pool.c
@@ -279,9 +279,14 @@ static void xp_release_deferred(struct work_struct *work)
{
struct xsk_buff_pool *pool = container_of(work, struct xsk_buff_pool,
work);
+ struct net_device *netdev = pool->netdev;
rtnl_lock();
- xp_clear_dev(pool);
+ if (netdev) {
+ netdev_lock_ops(netdev);
+ xp_clear_dev(pool);
+ netdev_unlock_ops(netdev);
+ }
rtnl_unlock();
if (pool->fq) {
--
2.48.1
^ permalink raw reply related [flat|nested] 38+ messages in thread
* [PATCH net v2 10/11] netdev: add "ops compat locking" helpers
2025-03-27 13:56 [PATCH net v2 00/11] net: hold instance lock during NETDEV_UP/REGISTER/UNREGISTER Stanislav Fomichev
` (8 preceding siblings ...)
2025-03-27 13:56 ` [PATCH net v2 09/11] net: designate XSK pool pointers in queues as "ops protected" Stanislav Fomichev
@ 2025-03-27 13:56 ` Stanislav Fomichev
2025-03-27 13:56 ` [PATCH net v2 11/11] netdev: don't hold rtnl_lock over nl queue info get when possible Stanislav Fomichev
2025-03-28 8:07 ` [PATCH net v2 00/11] net: hold instance lock during NETDEV_UP/REGISTER/UNREGISTER Taehee Yoo
11 siblings, 0 replies; 38+ messages in thread
From: Stanislav Fomichev @ 2025-03-27 13:56 UTC (permalink / raw)
To: netdev; +Cc: davem, edumazet, kuba, pabeni
From: Jakub Kicinski <kuba@kernel.org>
Add helpers to "lock a netdev in a backward-compatible way",
which for ops-locked netdevs will mean take the instance lock.
For drivers which haven't opted into the ops locking we'll take
rtnl_lock.
The scoped foreach is dropping and re-taking the lock for each
device, even if prev and next are both under rtnl_lock.
I hope that's fine since we expect that netdev nl to be mostly
supported by modern drivers, and modern drivers should also
opt into the instance locking.
Note that these helpers are mostly needed for queue related state,
because drivers modify queue config in their ops in a non-atomic
way. Or differently put, queue changes don't have a clear-cut API
like NAPI configuration. Any state that can should just use the
instance lock directly, not the "compat" hacks.
Acked-by: Stanislav Fomichev <sdf@fomichev.me>
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
Signed-off-by: Stanislav Fomichev <sdf@fomichev.me>
---
include/net/netdev_lock.h | 16 +++++++++++++
net/core/dev.c | 49 +++++++++++++++++++++++++++++++++++++++
net/core/dev.h | 15 ++++++++++++
3 files changed, 80 insertions(+)
diff --git a/include/net/netdev_lock.h b/include/net/netdev_lock.h
index 1c0c9a94cc22..76cbf5a449b6 100644
--- a/include/net/netdev_lock.h
+++ b/include/net/netdev_lock.h
@@ -64,6 +64,22 @@ netdev_ops_assert_locked_or_invisible(const struct net_device *dev)
netdev_ops_assert_locked(dev);
}
+static inline void netdev_lock_ops_compat(struct net_device *dev)
+{
+ if (netdev_need_ops_lock(dev))
+ netdev_lock(dev);
+ else
+ rtnl_lock();
+}
+
+static inline void netdev_unlock_ops_compat(struct net_device *dev)
+{
+ if (netdev_need_ops_lock(dev))
+ netdev_unlock(dev);
+ else
+ rtnl_unlock();
+}
+
static inline int netdev_lock_cmp_fn(const struct lockdep_map *a,
const struct lockdep_map *b)
{
diff --git a/net/core/dev.c b/net/core/dev.c
index bb4a135b1569..20ae7cb79163 100644
--- a/net/core/dev.c
+++ b/net/core/dev.c
@@ -1051,6 +1051,18 @@ struct net_device *__netdev_put_lock(struct net_device *dev)
return dev;
}
+static struct net_device *__netdev_put_lock_ops_compat(struct net_device *dev)
+{
+ netdev_lock_ops_compat(dev);
+ if (dev->reg_state > NETREG_REGISTERED) {
+ netdev_unlock_ops_compat(dev);
+ dev_put(dev);
+ return NULL;
+ }
+ dev_put(dev);
+ return dev;
+}
+
/**
* netdev_get_by_index_lock() - find a device by its ifindex
* @net: the applicable net namespace
@@ -1074,6 +1086,18 @@ struct net_device *netdev_get_by_index_lock(struct net *net, int ifindex)
}
EXPORT_SYMBOL(netdev_get_by_index_lock);
+struct net_device *
+netdev_get_by_index_lock_ops_compat(struct net *net, int ifindex)
+{
+ struct net_device *dev;
+
+ dev = dev_get_by_index(net, ifindex);
+ if (!dev)
+ return NULL;
+
+ return __netdev_put_lock_ops_compat(dev);
+}
+
struct net_device *
netdev_xa_find_lock(struct net *net, struct net_device *dev,
unsigned long *index)
@@ -1099,6 +1123,31 @@ netdev_xa_find_lock(struct net *net, struct net_device *dev,
} while (true);
}
+struct net_device *
+netdev_xa_find_lock_ops_compat(struct net *net, struct net_device *dev,
+ unsigned long *index)
+{
+ if (dev)
+ netdev_unlock_ops_compat(dev);
+
+ do {
+ rcu_read_lock();
+ dev = xa_find(&net->dev_by_index, index, ULONG_MAX, XA_PRESENT);
+ if (!dev) {
+ rcu_read_unlock();
+ return NULL;
+ }
+ dev_hold(dev);
+ rcu_read_unlock();
+
+ dev = __netdev_put_lock_ops_compat(dev);
+ if (dev)
+ return dev;
+
+ (*index)++;
+ } while (true);
+}
+
static DEFINE_SEQLOCK(netdev_rename_lock);
void netdev_copy_name(struct net_device *dev, char *name)
diff --git a/net/core/dev.h b/net/core/dev.h
index 8d35860f2e89..e7446b25bcde 100644
--- a/net/core/dev.h
+++ b/net/core/dev.h
@@ -40,6 +40,21 @@ DEFINE_FREE(netdev_unlock, struct net_device *, if (_T) netdev_unlock(_T));
(var_name = netdev_xa_find_lock(net, var_name, &ifindex)); \
ifindex++)
+struct net_device *
+netdev_get_by_index_lock_ops_compat(struct net *net, int ifindex);
+struct net_device *
+netdev_xa_find_lock_ops_compat(struct net *net, struct net_device *dev,
+ unsigned long *index);
+
+DEFINE_FREE(netdev_unlock_ops_compat, struct net_device *,
+ if (_T) netdev_unlock_ops_compat(_T));
+
+#define for_each_netdev_lock_ops_compat_scoped(net, var_name, ifindex) \
+ for (struct net_device *var_name __free(netdev_unlock_ops_compat) = NULL; \
+ (var_name = netdev_xa_find_lock_ops_compat(net, var_name, \
+ &ifindex)); \
+ ifindex++)
+
#ifdef CONFIG_PROC_FS
int __init dev_proc_init(void);
#else
--
2.48.1
^ permalink raw reply related [flat|nested] 38+ messages in thread
* [PATCH net v2 11/11] netdev: don't hold rtnl_lock over nl queue info get when possible
2025-03-27 13:56 [PATCH net v2 00/11] net: hold instance lock during NETDEV_UP/REGISTER/UNREGISTER Stanislav Fomichev
` (9 preceding siblings ...)
2025-03-27 13:56 ` [PATCH net v2 10/11] netdev: add "ops compat locking" helpers Stanislav Fomichev
@ 2025-03-27 13:56 ` Stanislav Fomichev
2025-03-28 8:07 ` [PATCH net v2 00/11] net: hold instance lock during NETDEV_UP/REGISTER/UNREGISTER Taehee Yoo
11 siblings, 0 replies; 38+ messages in thread
From: Stanislav Fomichev @ 2025-03-27 13:56 UTC (permalink / raw)
To: netdev; +Cc: davem, edumazet, kuba, pabeni
From: Jakub Kicinski <kuba@kernel.org>
Netdev queue dump accesses: NAPI, memory providers, XSk pointers.
All three are "ops protected" now, switch to the op compat locking.
rtnl lock does not have to be taken for "ops locked" devices.
Acked-by: Stanislav Fomichev <sdf@fomichev.me>
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
Signed-off-by: Stanislav Fomichev <sdf@fomichev.me>
---
net/core/netdev-genl.c | 18 +++++++-----------
1 file changed, 7 insertions(+), 11 deletions(-)
diff --git a/net/core/netdev-genl.c b/net/core/netdev-genl.c
index fd1cfa9707dc..39f52a311f07 100644
--- a/net/core/netdev-genl.c
+++ b/net/core/netdev-genl.c
@@ -481,18 +481,15 @@ int netdev_nl_queue_get_doit(struct sk_buff *skb, struct genl_info *info)
if (!rsp)
return -ENOMEM;
- rtnl_lock();
-
- netdev = netdev_get_by_index_lock(genl_info_net(info), ifindex);
+ netdev = netdev_get_by_index_lock_ops_compat(genl_info_net(info),
+ ifindex);
if (netdev) {
err = netdev_nl_queue_fill(rsp, netdev, q_id, q_type, info);
- netdev_unlock(netdev);
+ netdev_unlock_ops_compat(netdev);
} else {
err = -ENODEV;
}
- rtnl_unlock();
-
if (err)
goto err_free_msg;
@@ -541,17 +538,17 @@ int netdev_nl_queue_get_dumpit(struct sk_buff *skb, struct netlink_callback *cb)
if (info->attrs[NETDEV_A_QUEUE_IFINDEX])
ifindex = nla_get_u32(info->attrs[NETDEV_A_QUEUE_IFINDEX]);
- rtnl_lock();
if (ifindex) {
- netdev = netdev_get_by_index_lock(net, ifindex);
+ netdev = netdev_get_by_index_lock_ops_compat(net, ifindex);
if (netdev) {
err = netdev_nl_queue_dump_one(netdev, skb, info, ctx);
- netdev_unlock(netdev);
+ netdev_unlock_ops_compat(netdev);
} else {
err = -ENODEV;
}
} else {
- for_each_netdev_lock_scoped(net, netdev, ctx->ifindex) {
+ for_each_netdev_lock_ops_compat_scoped(net, netdev,
+ ctx->ifindex) {
err = netdev_nl_queue_dump_one(netdev, skb, info, ctx);
if (err < 0)
break;
@@ -559,7 +556,6 @@ int netdev_nl_queue_get_dumpit(struct sk_buff *skb, struct netlink_callback *cb)
ctx->txq_idx = 0;
}
}
- rtnl_unlock();
return err;
}
--
2.48.1
^ permalink raw reply related [flat|nested] 38+ messages in thread
* Re: [PATCH net v2 01/11] net: switch to netif_disable_lro in inetdev_init
2025-03-27 13:56 ` [PATCH net v2 01/11] net: switch to netif_disable_lro in inetdev_init Stanislav Fomichev
@ 2025-03-27 18:40 ` Jakub Kicinski
2025-03-27 18:59 ` Jakub Kicinski
1 sibling, 0 replies; 38+ messages in thread
From: Jakub Kicinski @ 2025-03-27 18:40 UTC (permalink / raw)
To: Stanislav Fomichev; +Cc: netdev, davem, edumazet, pabeni, Cosmin Ratiu
On Thu, 27 Mar 2025 06:56:49 -0700 Stanislav Fomichev wrote:
> Cosmin reports the following deadlock:
> dump_stack_lvl+0x62/0x90
> print_deadlock_bug+0x274/0x3b0
> __lock_acquire+0x1229/0x2470
> lock_acquire+0xb7/0x2b0
> __mutex_lock+0xa6/0xd20
> dev_disable_lro+0x20/0x80
> inetdev_init+0x12f/0x1f0
> inetdev_event+0x48b/0x870
> notifier_call_chain+0x38/0xf0
> netif_change_net_namespace+0x72e/0x9f0
> do_setlink.isra.0+0xd5/0x1220
> rtnl_newlink+0x7ea/0xb50
> rtnetlink_rcv_msg+0x459/0x5e0
> netlink_rcv_skb+0x54/0x100
> netlink_unicast+0x193/0x270
> netlink_sendmsg+0x204/0x450
>
> Switch to netif_disable_lro which assumes the caller holds the instance
> lock. inetdev_init is called for blackhole device (which sw device and
> doesn't grab instance lock) and from REGISTER/UNREGISTER notifiers.
> We already hold the instance lock for REGISTER notifier during
> netns change and we'll soon hold the lock during other paths.
Reviewed-by: Jakub Kicinski <kuba@kernel.org>
^ permalink raw reply [flat|nested] 38+ messages in thread
* Re: [PATCH net v2 02/11] net: hold instance lock during NETDEV_REGISTER/UP/UNREGISTER
2025-03-27 13:56 ` [PATCH net v2 02/11] net: hold instance lock during NETDEV_REGISTER/UP/UNREGISTER Stanislav Fomichev
@ 2025-03-27 18:58 ` Jakub Kicinski
0 siblings, 0 replies; 38+ messages in thread
From: Jakub Kicinski @ 2025-03-27 18:58 UTC (permalink / raw)
To: Stanislav Fomichev; +Cc: netdev, davem, edumazet, pabeni, Cosmin Ratiu
On Thu, 27 Mar 2025 06:56:50 -0700 Stanislav Fomichev wrote:
> static void call_netdevice_unregister_notifiers(struct notifier_block *nb,
> - struct net_device *dev)
> + struct net_device *dev,
> + struct net_device *locked)
> {
> if (dev->flags & IFF_UP) {
> call_netdevice_notifier(nb, NETDEV_GOING_DOWN,
> dev);
> call_netdevice_notifier(nb, NETDEV_DOWN, dev);
> }
> + if (dev != locked)
> + netdev_lock_ops(dev);
> call_netdevice_notifier(nb, NETDEV_UNREGISTER, dev);
> + if (dev != locked)
> + netdev_unlock_ops(dev);
> }
>
> static int call_netdevice_register_net_notifiers(struct notifier_block *nb,
> - struct net *net)
> + struct net *net,
> + struct net_device *locked)
> {
> struct net_device *dev;
> int err;
>
> for_each_netdev(net, dev) {
> + if (locked != dev)
> + netdev_lock_ops(dev);
> err = call_netdevice_register_notifiers(nb, dev);
> + if (locked != dev)
> + netdev_unlock_ops(dev);
> if (err)
> goto rollback;
> }
Any strong reason we wouldn't split the netns change into two chunks,
and release the ops lock while we move the notifiers?
I'm thinking rename netif_change_net_namespace() back to
dev_change_net_namespace(), move it up in setlink, and let it take
the lock.
^ permalink raw reply [flat|nested] 38+ messages in thread
* Re: [PATCH net v2 01/11] net: switch to netif_disable_lro in inetdev_init
2025-03-27 13:56 ` [PATCH net v2 01/11] net: switch to netif_disable_lro in inetdev_init Stanislav Fomichev
2025-03-27 18:40 ` Jakub Kicinski
@ 2025-03-27 18:59 ` Jakub Kicinski
2025-03-27 21:09 ` Stanislav Fomichev
1 sibling, 1 reply; 38+ messages in thread
From: Jakub Kicinski @ 2025-03-27 18:59 UTC (permalink / raw)
To: Stanislav Fomichev; +Cc: netdev, davem, edumazet, pabeni, Cosmin Ratiu
On Thu, 27 Mar 2025 06:56:49 -0700 Stanislav Fomichev wrote:
> +EXPORT_SYMBOL(netif_disable_lro);
Actually EXPORT_IPV6_MOD() would do here, no?
We only need this export for V6?
^ permalink raw reply [flat|nested] 38+ messages in thread
* Re: [PATCH net v2 03/11] net: use netif_disable_lro in ipv6_add_dev
2025-03-27 13:56 ` [PATCH net v2 03/11] net: use netif_disable_lro in ipv6_add_dev Stanislav Fomichev
@ 2025-03-27 19:02 ` Jakub Kicinski
2025-03-27 21:06 ` Stanislav Fomichev
0 siblings, 1 reply; 38+ messages in thread
From: Jakub Kicinski @ 2025-03-27 19:02 UTC (permalink / raw)
To: Stanislav Fomichev; +Cc: netdev, davem, edumazet, pabeni, Cosmin Ratiu
On Thu, 27 Mar 2025 06:56:51 -0700 Stanislav Fomichev wrote:
> @@ -3151,11 +3153,12 @@ int addrconf_add_ifaddr(struct net *net, void __user *arg)
> cfg.plen = ireq.ifr6_prefixlen;
>
> rtnl_net_lock(net);
> - dev = __dev_get_by_index(net, ireq.ifr6_ifindex);
> + dev = netdev_get_by_index_lock(net, ireq.ifr6_ifindex);
I think you want ops locking here, no?
netdev_get_by_index_lock() will also lock devs which didn't opt in.
^ permalink raw reply [flat|nested] 38+ messages in thread
* Re: [PATCH net v2 05/11] net/mlx5e: use netdev_lockdep_set_classes
2025-03-27 13:56 ` [PATCH net v2 05/11] net/mlx5e: use netdev_lockdep_set_classes Stanislav Fomichev
@ 2025-03-27 19:08 ` Jakub Kicinski
2025-03-27 21:05 ` Stanislav Fomichev
0 siblings, 1 reply; 38+ messages in thread
From: Jakub Kicinski @ 2025-03-27 19:08 UTC (permalink / raw)
To: Stanislav Fomichev; +Cc: netdev, davem, edumazet, pabeni, Cosmin Ratiu
On Thu, 27 Mar 2025 06:56:53 -0700 Stanislav Fomichev wrote:
> Cosmin reports a potential recursive lock warning in [0]. mlx5 is
> using register_netdevice_notifier_dev_net which might result in
> iteration over entire netns which triggers lock ordering issues.
> We know that lower devices are independent, so it's save to
> suppress the lockdep.
But mlx5 does not use instance locking, yet, so lets defer this one?
^ permalink raw reply [flat|nested] 38+ messages in thread
* Re: [PATCH net v2 06/11] netdevsim: add dummy device notifiers
2025-03-27 13:56 ` [PATCH net v2 06/11] netdevsim: add dummy device notifiers Stanislav Fomichev
@ 2025-03-27 19:12 ` Jakub Kicinski
2025-03-27 21:04 ` Stanislav Fomichev
0 siblings, 1 reply; 38+ messages in thread
From: Jakub Kicinski @ 2025-03-27 19:12 UTC (permalink / raw)
To: Stanislav Fomichev; +Cc: netdev, davem, edumazet, pabeni
On Thu, 27 Mar 2025 06:56:54 -0700 Stanislav Fomichev wrote:
> In order to exercise and verify notifiers' locking assumptions,
> register dummy notifiers and assert that netdev is ops locked
> for REGISTER/UNREGISTER/UP.
> +static int nsim_net_event(struct notifier_block *this, unsigned long event,
> + void *ptr)
> +{
> + struct net_device *dev = netdev_notifier_info_to_dev(ptr);
> +
> + switch (event) {
> + case NETDEV_REGISTER:
> + case NETDEV_UNREGISTER:
> + case NETDEV_UP:
> + netdev_ops_assert_locked(dev);
> + break;
> + default:
> + break;
> + }
> +
> + return NOTIFY_DONE;
> +}
Can we register empty notifiers in nsim (just to make sure it has
a callback) but do the validation in rtnl_net_debug.c
I guess we'd need to transform rtnl_net_debug.c a little,
make it less rtnl specific, compile under DEBUG_NET and ifdef
out the small rtnl parts?
That way we'll have coverage without netdevsim loaded which would
be all HW testing.
^ permalink raw reply [flat|nested] 38+ messages in thread
* Re: [PATCH net v2 08/11] docs: net: document netdev notifier expectations
2025-03-27 13:56 ` [PATCH net v2 08/11] docs: net: document netdev notifier expectations Stanislav Fomichev
@ 2025-03-27 19:16 ` Jakub Kicinski
2025-03-27 19:34 ` Jakub Kicinski
0 siblings, 1 reply; 38+ messages in thread
From: Jakub Kicinski @ 2025-03-27 19:16 UTC (permalink / raw)
To: Stanislav Fomichev; +Cc: netdev, davem, edumazet, pabeni
On Thu, 27 Mar 2025 06:56:56 -0700 Stanislav Fomichev wrote:
> We don't have a consistent state yet, but document where we think
> we are and where we wanna be.
Thanks for adding the doc!
> +Notifiers and netdev instance lock
> +==================================
> +
> +For device drivers that implement shaping or queue management APIs,
> +some of the notifiers (``enum netdev_cmd``) are running under the netdev
> +instance lock.
> +
> +Currently only the following notifiers are running under the instance lock:
I'd repeat again here:
... for devices with locked ops:
> +* ``NETDEV_REGISTER``
> +* ``NETDEV_UP``
> +* ``NETDEV_UNREGISTER``
Can I ask the obvious question - anything specific that's hard in also
taking it in DOWN or just no time to investigate? Symmetry would be
great.
> +There are no clear expectations for the remaining notifiers. Notifiers not on
> +the list may run with or without the instance lock, potentially even invoking
> +the same notifier type with and without the lock from different code paths.
> +The goal is to eventually ensure that all (or most, with a few documented
> +exceptions) notifiers run under the instance lock.
^ permalink raw reply [flat|nested] 38+ messages in thread
* Re: [PATCH net v2 08/11] docs: net: document netdev notifier expectations
2025-03-27 19:16 ` Jakub Kicinski
@ 2025-03-27 19:34 ` Jakub Kicinski
2025-03-27 20:57 ` Stanislav Fomichev
0 siblings, 1 reply; 38+ messages in thread
From: Jakub Kicinski @ 2025-03-27 19:34 UTC (permalink / raw)
To: Stanislav Fomichev; +Cc: netdev, davem, edumazet, pabeni
On Thu, 27 Mar 2025 12:16:13 -0700 Jakub Kicinski wrote:
> > +* ``NETDEV_REGISTER``
> > +* ``NETDEV_UP``
> > +* ``NETDEV_UNREGISTER``
>
> Can I ask the obvious question - anything specific that's hard in also
> taking it in DOWN or just no time to investigate? Symmetry would be
> great.
Looking at patch 4 maybe we should do the opposite. This was my
original commit msg for locking UNREGISTER:
net: make NETDEV_UNREGISTER and instance lock more consistent
The NETDEV_UNREGISTER notifier gets called under the ops lock
when device changes namespace but not during real unregistration.
Take it consistently, XSK tries to poke at netdev queue state
from this notifier.
So if the only caller currently under the lock is netns change, and
we already split that to release the lock - maybe we can make
UNREGISTER always unlocked instead?
^ permalink raw reply [flat|nested] 38+ messages in thread
* Re: [PATCH net v2 08/11] docs: net: document netdev notifier expectations
2025-03-27 19:34 ` Jakub Kicinski
@ 2025-03-27 20:57 ` Stanislav Fomichev
2025-03-27 21:50 ` Jakub Kicinski
0 siblings, 1 reply; 38+ messages in thread
From: Stanislav Fomichev @ 2025-03-27 20:57 UTC (permalink / raw)
To: Jakub Kicinski; +Cc: Stanislav Fomichev, netdev, davem, edumazet, pabeni
On 03/27, Jakub Kicinski wrote:
> On Thu, 27 Mar 2025 12:16:13 -0700 Jakub Kicinski wrote:
> > > +* ``NETDEV_REGISTER``
> > > +* ``NETDEV_UP``
> > > +* ``NETDEV_UNREGISTER``
> >
> > Can I ask the obvious question - anything specific that's hard in also
> > taking it in DOWN or just no time to investigate? Symmetry would be
> > great.
The latter: I added locks for DOWN, hit a dev_close somewhere, and
decided no to go down the rabbit hole.
> Looking at patch 4 maybe we should do the opposite. This was my
> original commit msg for locking UNREGISTER:
>
> net: make NETDEV_UNREGISTER and instance lock more consistent
>
> The NETDEV_UNREGISTER notifier gets called under the ops lock
> when device changes namespace but not during real unregistration.
> Take it consistently, XSK tries to poke at netdev queue state
> from this notifier.
>
> So if the only caller currently under the lock is netns change, and
> we already split that to release the lock - maybe we can make
> UNREGISTER always unlocked instead?
That sounds very sensible, let me try it out and run the tests.
I'll have to drop the lock twice, once for NETDEV_UNREGISTER
and another time for move_netdevice_notifiers_dev_net, but since
the device is unlisted, nothing should touch it (in theory)?
netif_change_net_namespace is already the first thing that happens
in do_setlink, so I won't be converting it to dev_xxx (lmk if I
miss something here).
If it goes well, I'll also hack your xsk patch to grab the ops lock
in xsk_notifier:NETDEV_UNREGISTER, I think that's the only thing
that needs changes. The ugly bonding and teaming unlock/locks
will go away (which is a very nice side effect).
^ permalink raw reply [flat|nested] 38+ messages in thread
* Re: [PATCH net v2 06/11] netdevsim: add dummy device notifiers
2025-03-27 19:12 ` Jakub Kicinski
@ 2025-03-27 21:04 ` Stanislav Fomichev
2025-03-27 21:46 ` Jakub Kicinski
0 siblings, 1 reply; 38+ messages in thread
From: Stanislav Fomichev @ 2025-03-27 21:04 UTC (permalink / raw)
To: Jakub Kicinski; +Cc: Stanislav Fomichev, netdev, davem, edumazet, pabeni
On 03/27, Jakub Kicinski wrote:
> On Thu, 27 Mar 2025 06:56:54 -0700 Stanislav Fomichev wrote:
> > In order to exercise and verify notifiers' locking assumptions,
> > register dummy notifiers and assert that netdev is ops locked
> > for REGISTER/UNREGISTER/UP.
>
> > +static int nsim_net_event(struct notifier_block *this, unsigned long event,
> > + void *ptr)
> > +{
> > + struct net_device *dev = netdev_notifier_info_to_dev(ptr);
> > +
> > + switch (event) {
> > + case NETDEV_REGISTER:
> > + case NETDEV_UNREGISTER:
> > + case NETDEV_UP:
> > + netdev_ops_assert_locked(dev);
> > + break;
> > + default:
> > + break;
> > + }
> > +
> > + return NOTIFY_DONE;
> > +}
>
> Can we register empty notifiers in nsim (just to make sure it has
> a callback) but do the validation in rtnl_net_debug.c
> I guess we'd need to transform rtnl_net_debug.c a little,
> make it less rtnl specific, compile under DEBUG_NET and ifdef
> out the small rtnl parts?
s/rtnl_net_debug.c/notifiers_debug.c/ + DEBUG_NET? Or I can keep the
name and only do the DEBUG_NET part. Not sure what needs to be ifdef-ed out,
but will take a look (probably just enough to make it compile with
!CONFIG_DEBUG_NET_SMALL_RTNL ?). That should work for the regular notifiers,
but I think register_netdevice_notifier_dev_net needs a netdev?
^ permalink raw reply [flat|nested] 38+ messages in thread
* Re: [PATCH net v2 05/11] net/mlx5e: use netdev_lockdep_set_classes
2025-03-27 19:08 ` Jakub Kicinski
@ 2025-03-27 21:05 ` Stanislav Fomichev
2025-03-31 8:01 ` Cosmin Ratiu
0 siblings, 1 reply; 38+ messages in thread
From: Stanislav Fomichev @ 2025-03-27 21:05 UTC (permalink / raw)
To: Jakub Kicinski
Cc: Stanislav Fomichev, netdev, davem, edumazet, pabeni, Cosmin Ratiu
On 03/27, Jakub Kicinski wrote:
> On Thu, 27 Mar 2025 06:56:53 -0700 Stanislav Fomichev wrote:
> > Cosmin reports a potential recursive lock warning in [0]. mlx5 is
> > using register_netdevice_notifier_dev_net which might result in
> > iteration over entire netns which triggers lock ordering issues.
> > We know that lower devices are independent, so it's save to
> > suppress the lockdep.
>
> But mlx5 does not use instance locking, yet, so lets defer this one?
SG! Maybe the mlx folks can have it as part of their queue mgmt work?
Cosmin are you ok with adding this to your patch series?
^ permalink raw reply [flat|nested] 38+ messages in thread
* Re: [PATCH net v2 03/11] net: use netif_disable_lro in ipv6_add_dev
2025-03-27 19:02 ` Jakub Kicinski
@ 2025-03-27 21:06 ` Stanislav Fomichev
2025-03-27 21:37 ` Jakub Kicinski
0 siblings, 1 reply; 38+ messages in thread
From: Stanislav Fomichev @ 2025-03-27 21:06 UTC (permalink / raw)
To: Jakub Kicinski
Cc: Stanislav Fomichev, netdev, davem, edumazet, pabeni, Cosmin Ratiu
On 03/27, Jakub Kicinski wrote:
> On Thu, 27 Mar 2025 06:56:51 -0700 Stanislav Fomichev wrote:
> > @@ -3151,11 +3153,12 @@ int addrconf_add_ifaddr(struct net *net, void __user *arg)
> > cfg.plen = ireq.ifr6_prefixlen;
> >
> > rtnl_net_lock(net);
> > - dev = __dev_get_by_index(net, ireq.ifr6_ifindex);
> > + dev = netdev_get_by_index_lock(net, ireq.ifr6_ifindex);
>
> I think you want ops locking here, no?
> netdev_get_by_index_lock() will also lock devs which didn't opt in.
New netdev_get_by_index_lock_ops? I felt like we already have too many
xxxdev_get_by, but agreed that it should be safer, will do!
^ permalink raw reply [flat|nested] 38+ messages in thread
* Re: [PATCH net v2 01/11] net: switch to netif_disable_lro in inetdev_init
2025-03-27 18:59 ` Jakub Kicinski
@ 2025-03-27 21:09 ` Stanislav Fomichev
2025-03-27 21:36 ` Jakub Kicinski
0 siblings, 1 reply; 38+ messages in thread
From: Stanislav Fomichev @ 2025-03-27 21:09 UTC (permalink / raw)
To: Jakub Kicinski
Cc: Stanislav Fomichev, netdev, davem, edumazet, pabeni, Cosmin Ratiu
On 03/27, Jakub Kicinski wrote:
> On Thu, 27 Mar 2025 06:56:49 -0700 Stanislav Fomichev wrote:
> > +EXPORT_SYMBOL(netif_disable_lro);
>
> Actually EXPORT_IPV6_MOD() would do here, no?
> We only need this export for V6?
This patch is touching v4 net/ipv4/devinet.c, so both :-(
^ permalink raw reply [flat|nested] 38+ messages in thread
* Re: [PATCH net v2 01/11] net: switch to netif_disable_lro in inetdev_init
2025-03-27 21:09 ` Stanislav Fomichev
@ 2025-03-27 21:36 ` Jakub Kicinski
2025-03-28 15:01 ` Stanislav Fomichev
0 siblings, 1 reply; 38+ messages in thread
From: Jakub Kicinski @ 2025-03-27 21:36 UTC (permalink / raw)
To: Stanislav Fomichev
Cc: Stanislav Fomichev, netdev, davem, edumazet, pabeni, Cosmin Ratiu
On Thu, 27 Mar 2025 14:09:07 -0700 Stanislav Fomichev wrote:
> On 03/27, Jakub Kicinski wrote:
> > On Thu, 27 Mar 2025 06:56:49 -0700 Stanislav Fomichev wrote:
> > > +EXPORT_SYMBOL(netif_disable_lro);
> >
> > Actually EXPORT_IPV6_MOD() would do here, no?
> > We only need this export for V6?
>
> This patch is touching v4 net/ipv4/devinet.c, so both :-(
IPv4 can't be a module tho, we're talking about an export..
^ permalink raw reply [flat|nested] 38+ messages in thread
* Re: [PATCH net v2 03/11] net: use netif_disable_lro in ipv6_add_dev
2025-03-27 21:06 ` Stanislav Fomichev
@ 2025-03-27 21:37 ` Jakub Kicinski
2025-03-28 15:01 ` Stanislav Fomichev
0 siblings, 1 reply; 38+ messages in thread
From: Jakub Kicinski @ 2025-03-27 21:37 UTC (permalink / raw)
To: Stanislav Fomichev
Cc: Stanislav Fomichev, netdev, davem, edumazet, pabeni, Cosmin Ratiu
On Thu, 27 Mar 2025 14:06:43 -0700 Stanislav Fomichev wrote:
> On 03/27, Jakub Kicinski wrote:
> > On Thu, 27 Mar 2025 06:56:51 -0700 Stanislav Fomichev wrote:
> > > @@ -3151,11 +3153,12 @@ int addrconf_add_ifaddr(struct net *net, void __user *arg)
> > > cfg.plen = ireq.ifr6_prefixlen;
> > >
> > > rtnl_net_lock(net);
> > > - dev = __dev_get_by_index(net, ireq.ifr6_ifindex);
> > > + dev = netdev_get_by_index_lock(net, ireq.ifr6_ifindex);
> >
> > I think you want ops locking here, no?
> > netdev_get_by_index_lock() will also lock devs which didn't opt in.
>
> New netdev_get_by_index_lock_ops? I felt like we already have too many
> xxxdev_get_by, but agreed that it should be safer, will do!
I think we're holding rtnl_lock here, so we don't need an
"atomic get and lock", we can stick to __dev_get_by_index()
and then lock it separately?
^ permalink raw reply [flat|nested] 38+ messages in thread
* Re: [PATCH net v2 06/11] netdevsim: add dummy device notifiers
2025-03-27 21:04 ` Stanislav Fomichev
@ 2025-03-27 21:46 ` Jakub Kicinski
2025-03-28 6:03 ` Kuniyuki Iwashima
2025-03-28 15:04 ` Stanislav Fomichev
0 siblings, 2 replies; 38+ messages in thread
From: Jakub Kicinski @ 2025-03-27 21:46 UTC (permalink / raw)
To: Stanislav Fomichev; +Cc: Stanislav Fomichev, netdev, davem, edumazet, pabeni
On Thu, 27 Mar 2025 14:04:06 -0700 Stanislav Fomichev wrote:
> > Can we register empty notifiers in nsim (just to make sure it has
> > a callback) but do the validation in rtnl_net_debug.c
> > I guess we'd need to transform rtnl_net_debug.c a little,
> > make it less rtnl specific, compile under DEBUG_NET and ifdef
> > out the small rtnl parts?
>
> s/rtnl_net_debug.c/notifiers_debug.c/ + DEBUG_NET? Or I can keep the
> name and only do the DEBUG_NET part.
I was thinking lock or locking as in net/core/lock_debug.c
But yeah, it's locking in notifier locking, maybe
net/core/notifier_lock_debug.c then? No strong feelings.
> Not sure what needs to be ifdef-ed out,
> but will take a look (probably just enough to make it compile with
> !CONFIG_DEBUG_NET_SMALL_RTNL ?).
You're right, looking at the code we need all of it.
Somehow I thought its doing extra netns related stuff but it just
register a notifier in each ns.
I guess we may not need any ifdef at all.
> That should work for the regular notifiers,
> but I think register_netdevice_notifier_dev_net needs a netdev?
Hm. Yes. Not sure if we need anything extra in the notifier for nsim
or we just want to make make sure it registers one. If the latter
I guess we could export rtnl_net_debug_event (modulo rename) and
call it from netdevsim? I mean - we would probably have the same
exact asserts in both?
^ permalink raw reply [flat|nested] 38+ messages in thread
* Re: [PATCH net v2 08/11] docs: net: document netdev notifier expectations
2025-03-27 20:57 ` Stanislav Fomichev
@ 2025-03-27 21:50 ` Jakub Kicinski
2025-03-28 15:03 ` Stanislav Fomichev
0 siblings, 1 reply; 38+ messages in thread
From: Jakub Kicinski @ 2025-03-27 21:50 UTC (permalink / raw)
To: Stanislav Fomichev; +Cc: Stanislav Fomichev, netdev, davem, edumazet, pabeni
On Thu, 27 Mar 2025 13:57:01 -0700 Stanislav Fomichev wrote:
> That sounds very sensible, let me try it out and run the tests.
> I'll have to drop the lock twice, once for NETDEV_UNREGISTER
> and another time for move_netdevice_notifiers_dev_net, but since
> the device is unlisted, nothing should touch it (in theory)?
Yup, and/or we can adjust if we find a reason to, I don't think
the ordering of the actions in netns changes is precisely intentional.
> netif_change_net_namespace is already the first thing that happens
> in do_setlink, so I won't be converting it to dev_xxx (lmk if I
> miss something here).
I thought you could move it outside the lock in do_setlink()
and have [netif -> dev]_change_net_namespace take the lock.
Dropping and taking the lock in a callee is a bit bad, so
I'd prefer if the netif_ / "I want to switch netns but I'm already
holding the lock" version of _change_net_namespace didn't exist
at all.
^ permalink raw reply [flat|nested] 38+ messages in thread
* Re: [PATCH net v2 06/11] netdevsim: add dummy device notifiers
2025-03-27 21:46 ` Jakub Kicinski
@ 2025-03-28 6:03 ` Kuniyuki Iwashima
2025-03-28 15:07 ` Stanislav Fomichev
2025-03-28 15:04 ` Stanislav Fomichev
1 sibling, 1 reply; 38+ messages in thread
From: Kuniyuki Iwashima @ 2025-03-28 6:03 UTC (permalink / raw)
To: kuba; +Cc: davem, edumazet, netdev, pabeni, sdf, stfomichev
From: Jakub Kicinski <kuba@kernel.org>
Date: Thu, 27 Mar 2025 14:46:09 -0700
> On Thu, 27 Mar 2025 14:04:06 -0700 Stanislav Fomichev wrote:
> > > Can we register empty notifiers in nsim (just to make sure it has
> > > a callback) but do the validation in rtnl_net_debug.c
> > > I guess we'd need to transform rtnl_net_debug.c a little,
> > > make it less rtnl specific, compile under DEBUG_NET and ifdef
> > > out the small rtnl parts?
> >
> > s/rtnl_net_debug.c/notifiers_debug.c/ + DEBUG_NET? Or I can keep the
> > name and only do the DEBUG_NET part.
>
> I was thinking lock or locking as in net/core/lock_debug.c
Maybe lock.c (or netdev_lock.c like netdev_lock.h) and move all
locking stuff (netdev_lock_type[], netdev_lock_pos(), etc) there
later + ifdef where necessary ?
> But yeah, it's locking in notifier locking, maybe
> net/core/notifier_lock_debug.c then? No strong feelings.
>
> > Not sure what needs to be ifdef-ed out,
> > but will take a look (probably just enough to make it compile with
> > !CONFIG_DEBUG_NET_SMALL_RTNL ?).
>
> You're right, looking at the code we need all of it.
> Somehow I thought its doing extra netns related stuff but it just
> register a notifier in each ns.
> I guess we may not need any ifdef at all.
>
> > That should work for the regular notifiers,
> > but I think register_netdevice_notifier_dev_net needs a netdev?
>
> Hm. Yes. Not sure if we need anything extra in the notifier for nsim
> or we just want to make make sure it registers one. If the latter
> I guess we could export rtnl_net_debug_event (modulo rename) and
> call it from netdevsim? I mean - we would probably have the same
> exact asserts in both?
>
^ permalink raw reply [flat|nested] 38+ messages in thread
* Re: [PATCH net v2 00/11] net: hold instance lock during NETDEV_UP/REGISTER/UNREGISTER
2025-03-27 13:56 [PATCH net v2 00/11] net: hold instance lock during NETDEV_UP/REGISTER/UNREGISTER Stanislav Fomichev
` (10 preceding siblings ...)
2025-03-27 13:56 ` [PATCH net v2 11/11] netdev: don't hold rtnl_lock over nl queue info get when possible Stanislav Fomichev
@ 2025-03-28 8:07 ` Taehee Yoo
2025-03-28 15:43 ` Stanislav Fomichev
11 siblings, 1 reply; 38+ messages in thread
From: Taehee Yoo @ 2025-03-28 8:07 UTC (permalink / raw)
To: Stanislav Fomichev; +Cc: netdev, davem, edumazet, kuba, pabeni
On Thu, Mar 27, 2025 at 10:57 PM Stanislav Fomichev <sdf@fomichev.me> wrote:
>
Hi Stanislav,
Thanks a lot for the patch!
> Solving the issue reported by Cosmin in [0] requires consistent
> lock during NETDEV_UP/REGISTER/UNREGISTER notifiers. This series
> addresses that (along with some other fixes in net/ipv4/devinet.c
> and net/ipv6/addrconf.c) and appends the patches from Jakub
> that were conditional on locked NETDEV_UNREGISTER.
>
> 0: https://lore.kernel.org/netdev/700fa36b94cbd57cfea2622029b087643c80cbc9.camel@nvidia.com/
>
I tested it using netdevsim/veth and my Broadcom NIC.
It appears that netdevsim/veth has no issues, but I encountered many
RTNL assertions in the bnxt driver.
Reproducer:
interface=<bnxt interface>
ip a a 10.0.0.1/24 dev $interface
ip a a 2001:db8::1/64 dev $interface
ip link set $interface up
reboot
Splats:
=============================
WARNING: suspicious RCU usage
6.14.0+ #2 Tainted: G W
-----------------------------
./include/linux/inetdevice.h:256 suspicious rcu_dereference_protected() usage!
other info that might help us debug this:
rcu_scheduler_active = 2, debug_locks = 1
4 locks held by shutdown/1:
#0: ffffffffa4d58750 (system_transition_mutex){+.+.}-{4:4}, at:
__do_sys_reboot (kernel/reboot.c:760)
#1: ffff888114d0c1b8 (&dev->mutex){....}-{4:4}, at: device_shutdown
(./include/linux/device.h:922 drivers/base/core.c:4802)
#2: ffff8881152211b8 (&dev->mutex){....}-{4:4}, at: device_shutdown
(./include/linux/pm_runtime.h:121 drivers/base/core.c:4805)
#3: ffff888178e24d90 (&dev->lock){+.+.}-{4:4}, at: bnxt_shutdown
(drivers/net/ethernet/broadcom/bnxt/bnxt.c:16703) bnxt_en
stack backtrace:
CPU: 0 UID: 0 PID: 1 Comm: shutdown Tainted: G W
6.14.0+ #2 PREEMPT(undef) 271a3d276f79e3bb26d6065917556e94aae0d88d
Tainted: [W]=WARN
Hardware name: ASUS System Product Name/PRIME Z690-P D4, BIOS 0603 11/01/2021
Call Trace:
<TASK>
dump_stack_lvl (lib/dump_stack.c:123)
lockdep_rcu_suspicious (kernel/locking/lockdep.c:6863)
inetdev_event (./include/linux/inetdevice.h:256 net/ipv4/devinet.c:1585)
? __pfx_inetdev_event (net/ipv4/devinet.c:1583)
? fib_rules_event (net/core/fib_rules.c:1367 (discriminator 3))
? fib_rules_event (net/core/fib_rules.c:1367 (discriminator 3))
? notifier_call_chain (kernel/notifier.c:85)
notifier_call_chain (kernel/notifier.c:85)
__dev_close_many (net/core/dev.c:1732 (discriminator 3))
? __pfx___dev_close_many (net/core/dev.c:1720)
? __mutex_lock (./arch/x86/include/asm/preempt.h:104
kernel/locking/mutex.c:713 kernel/locking/mutex.c:732)
dev_close_many (net/core/dev.c:1786)
? __pfx_dev_close_many (net/core/dev.c:1776)
netif_close (./include/linux/list.h:124 ./include/linux/list.h:215
./include/linux/list.h:229 net/core/dev.c:1802 net/core/dev.c:1795)
? __pfx_netif_close (net/core/dev.c:1796)
? mark_held_locks (kernel/locking/lockdep.c:4326)
bnxt_shutdown (drivers/net/ethernet/broadcom/bnxt/bnxt.c:16707) bnxt_en
pci_device_shutdown (drivers/pci/pci-driver.c:511)
device_shutdown (drivers/base/core.c:4820)
kernel_restart (kernel/reboot.c:271 kernel/reboot.c:285)
__do_sys_reboot (kernel/reboot.c:763)
? __pfx___do_sys_reboot (kernel/reboot.c:725)
? rseq_get_rseq_cs (kernel/rseq.c:310)
? rseq_syscall (kernel/rseq.c:465)
? __pfx_rseq_syscall (kernel/rseq.c:458)
? do_writev (fs/read_write.c:1101)
? __pfx_do_writev (fs/read_write.c:1091)
do_syscall_64 (arch/x86/entry/syscall_64.c:63 arch/x86/entry/syscall_64.c:94)
entry_SYSCALL_64_after_hwframe (arch/x86/entry/entry_64.S:130)
RIP: 0033:0x7f7f28830a07
Code: c7 c0 ff ff ff ff eb be 66 2e 0f 1f 84 00 00 00 00 00 90 f3 0f
1e fa 89 fa be 69 19 12 28 bf ad de e1 fe b8 a9 00 00 00 0f 05 <48> 3d
008
All code
========
0: c7 c0 ff ff ff ff mov $0xffffffff,%eax
6: eb be jmp 0xffffffffffffffc6
8: 66 2e 0f 1f 84 00 00 cs nopw 0x0(%rax,%rax,1)
f: 00 00 00
12: 90 nop
13: f3 0f 1e fa endbr64
17: 89 fa mov %edi,%edx
19: be 69 19 12 28 mov $0x28121969,%esi
1e: bf ad de e1 fe mov $0xfee1dead,%edi
23: b8 a9 00 00 00 mov $0xa9,%eax
28: 0f 05 syscall
2a:* 48 rex.W <-- trapping instruction
2b: 3d .byte 0x3d
2c: 08 .byte 0x8
Code starting with the faulting instruction
===========================================
0: 48 rex.W
1: 3d .byte 0x3d
2: 08 .byte 0x8
RSP: 002b:00007ffc65d6b1a8 EFLAGS: 00000246 ORIG_RAX: 00000000000000a9
RAX: ffffffffffffffda RBX: 0000000000000003 RCX: 00007f7f28830a07
RDX: 0000000001234567 RSI: 0000000028121969 RDI: 00000000fee1dead
RBP: 00007ffc65d6b3e0 R08: 0000000000000069 R09: 0000000000000000
R10: 0000000000000000 R11: 0000000000000246 R12: 0000000000000000
R13: 0000000000000000 R14: 0000000000000000 R15: 0000000001234567
</TASK>
------------[ cut here ]------------
RTNL: assertion failed at net/ipv4/devinet.c (1587)
WARNING: CPU: 0 PID: 1 at net/ipv4/devinet.c:1587 inetdev_event
(net/ipv4/devinet.c:1587 (discriminator 3))
Modules linked in: xt_nat xt_tcpudp veth xt_conntrack nft_chain_nat
xt_MASQUERADE nf_conntrack_netlink xfrm_user xt_addrtype nft_compat
nf_tabs
CPU: 0 UID: 0 PID: 1 Comm: shutdown Tainted: G W
6.14.0+ #2 PREEMPT(undef) 271a3d276f79e3bb26d6065917556e94aae0d88d
Tainted: [W]=WARN
Hardware name: ASUS System Product Name/PRIME Z690-P D4, BIOS 0603 11/01/2021
RIP: 0010:inetdev_event (net/ipv4/devinet.c:1587 (discriminator 3))
Code: 76 3a 0b 09 00 0f 85 51 f7 ff ff ba 33 06 00 00 48 c7 c6 80 57
02 a4 48 c7 c7 c0 57 02 a4 c6 05 56 3a 0b 09 01 e8 7e 90 f8 fd <0f> 0b
e90
All code
========
0: 76 3a jbe 0x3c
2: 0b 09 or (%rcx),%ecx
4: 00 0f add %cl,(%rdi)
6: 85 51 f7 test %edx,-0x9(%rcx)
9: ff (bad)
a: ff (bad)
b: ba 33 06 00 00 mov $0x633,%edx
10: 48 c7 c6 80 57 02 a4 mov $0xffffffffa4025780,%rsi
17: 48 c7 c7 c0 57 02 a4 mov $0xffffffffa40257c0,%rdi
1e: c6 05 56 3a 0b 09 01 movb $0x1,0x90b3a56(%rip) # 0x90b3a7b
25: e8 7e 90 f8 fd call 0xfffffffffdf890a8
2a:* 0f 0b ud2 <-- trapping instruction
2c: 90 nop
Code starting with the faulting instruction
===========================================
0: 0f 0b ud2
2: 90 nop
RSP: 0018:ffff888104e2f980 EFLAGS: 00010286
RAX: 0000000000000000 RBX: 1ffff110209c5f38 RCX: 0000000000000000
RDX: 0000000000000002 RSI: 0000000000000004 RDI: 0000000000000001
RBP: ffff888104e2fa50 R08: 0000000000000000 R09: fffffbfff49a4af4
R10: 0000000000000003 R11: 0000000000000001 R12: ffff888178e24000
R13: ffff8881a3141000 R14: 000000000000000a R15: ffff888178e24420
FS: 00007f7f27cb4440(0000) GS:ffff88886dc22000(0000) knlGS:0000000000000000
CS: 0010 DS: 0000 ES: 0000 CR0: 0000000080050033
CR2: 00007ffc65d6b0cc CR3: 00000001d73de000 CR4: 00000000007506f0
PKRU: 55555554
Call Trace:
<TASK>
? __warn (kernel/panic.c:748)
? __pfx_vprintk_emit.part.0 (kernel/printk/printk.c:2378)
? inetdev_event (net/ipv4/devinet.c:1587 (discriminator 3))
? report_bug (lib/bug.c:201 lib/bug.c:219)
? inetdev_event (net/ipv4/devinet.c:1587 (discriminator 3))
? handle_bug (arch/x86/kernel/traps.c:337)
? exc_invalid_op (arch/x86/kernel/traps.c:391 (discriminator 1))
? asm_exc_invalid_op (./arch/x86/include/asm/idtentry.h:578)
? inetdev_event (net/ipv4/devinet.c:1587 (discriminator 3))
? __pfx_inetdev_event (net/ipv4/devinet.c:1583)
? fib_rules_event (net/core/fib_rules.c:1367 (discriminator 3))
? fib_rules_event (net/core/fib_rules.c:1367 (discriminator 3))
? notifier_call_chain (kernel/notifier.c:85)
notifier_call_chain (kernel/notifier.c:85)
__dev_close_many (net/core/dev.c:1732 (discriminator 3))
? __pfx___dev_close_many (net/core/dev.c:1720)
? __mutex_lock (./arch/x86/include/asm/preempt.h:104
kernel/locking/mutex.c:713 kernel/locking/mutex.c:732)
dev_close_many (net/core/dev.c:1786)
? __pfx_dev_close_many (net/core/dev.c:1776)
netif_close (./include/linux/list.h:124 ./include/linux/list.h:215
./include/linux/list.h:229 net/core/dev.c:1802 net/core/dev.c:1795)
? __pfx_netif_close (net/core/dev.c:1796)
? mark_held_locks (kernel/locking/lockdep.c:4326)
bnxt_shutdown (drivers/net/ethernet/broadcom/bnxt/bnxt.c:16707) bnxt_en
pci_device_shutdown (drivers/pci/pci-driver.c:511)
device_shutdown (drivers/base/core.c:4820)
kernel_restart (kernel/reboot.c:271 kernel/reboot.c:285)
__do_sys_reboot (kernel/reboot.c:763)
? __pfx___do_sys_reboot (kernel/reboot.c:725)
? rseq_get_rseq_cs (kernel/rseq.c:310)
? rseq_syscall (kernel/rseq.c:465)
? __pfx_rseq_syscall (kernel/rseq.c:458)
? do_writev (fs/read_write.c:1101)
? __pfx_do_writev (fs/read_write.c:1091)
do_syscall_64 (arch/x86/entry/syscall_64.c:63 arch/x86/entry/syscall_64.c:94)
entry_SYSCALL_64_after_hwframe (arch/x86/entry/entry_64.S:130)
RIP: 0033:0x7f7f28830a07
Code: c7 c0 ff ff ff ff eb be 66 2e 0f 1f 84 00 00 00 00 00 90 f3 0f
1e fa 89 fa be 69 19 12 28 bf ad de e1 fe b8 a9 00 00 00 0f 05 <48> 3d
008
All code
========
0: c7 c0 ff ff ff ff mov $0xffffffff,%eax
6: eb be jmp 0xffffffffffffffc6
8: 66 2e 0f 1f 84 00 00 cs nopw 0x0(%rax,%rax,1)
f: 00 00 00
12: 90 nop
13: f3 0f 1e fa endbr64
17: 89 fa mov %edi,%edx
19: be 69 19 12 28 mov $0x28121969,%esi
1e: bf ad de e1 fe mov $0xfee1dead,%edi
23: b8 a9 00 00 00 mov $0xa9,%eax
28: 0f 05 syscall
2a:* 48 rex.W <-- trapping instruction
2b: 3d .byte 0x3d
2c: 08 .byte 0x8
Code starting with the faulting instruction
===========================================
0: 48 rex.W
1: 3d .byte 0x3d
2: 08 .byte 0x8
RSP: 002b:00007ffc65d6b1a8 EFLAGS: 00000246 ORIG_RAX: 00000000000000a9
RAX: ffffffffffffffda RBX: 0000000000000003 RCX: 00007f7f28830a07
RDX: 0000000001234567 RSI: 0000000028121969 RDI: 00000000fee1dead
RBP: 00007ffc65d6b3e0 R08: 0000000000000069 R09: 0000000000000000
R10: 0000000000000000 R11: 0000000000000246 R12: 0000000000000000
R13: 0000000000000000 R14: 0000000000000000 R15: 0000000001234567
</TASK>
irq event stamp: 12714113
hardirqs last enabled at (12714125): __up_console_sem
(kernel/printk/printk.c:344 (discriminator 1))
hardirqs last disabled at (12714142): __up_console_sem
(kernel/printk/printk.c:342 (discriminator 1))
softirqs last enabled at (12714138): __irq_exit_rcu
(kernel/softirq.c:596 kernel/softirq.c:435 kernel/softirq.c:662)
softirqs last disabled at (12714133): __irq_exit_rcu
(kernel/softirq.c:596 kernel/softirq.c:435 kernel/softirq.c:662)
---[ end trace 0000000000000000 ]---
=============================
WARNING: suspicious RCU usage
6.14.0+ #2 Tainted: G W
-----------------------------
./include/linux/inetdevice.h:256 suspicious rcu_dereference_protected() usage!
other info that might help us debug this:
rcu_scheduler_active = 2, debug_locks = 1
4 locks held by shutdown/1:
#0: ffffffffa4d58750 (system_transition_mutex){+.+.}-{4:4}, at:
__do_sys_reboot (kernel/reboot.c:760)
#1: ffff888114d0c1b8 (&dev->mutex){....}-{4:4}, at: device_shutdown
(./include/linux/device.h:922 drivers/base/core.c:4802)
#2: ffff8881152211b8 (&dev->mutex){....}-{4:4}, at: device_shutdown
(./include/linux/pm_runtime.h:121 drivers/base/core.c:4805)
#3: ffff888178e24d90 (&dev->lock){+.+.}-{4:4}, at: bnxt_shutdown
(drivers/net/ethernet/broadcom/bnxt/bnxt.c:16703) bnxt_en
stack backtrace:
CPU: 0 UID: 0 PID: 1 Comm: shutdown Tainted: G W
6.14.0+ #2 PREEMPT(undef) 271a3d276f79e3bb26d6065917556e94aae0d88d
Tainted: [W]=WARN
Hardware name: ASUS System Product Name/PRIME Z690-P D4, BIOS 0603 11/01/2021
Call Trace:
<TASK>
dump_stack_lvl (lib/dump_stack.c:123)
lockdep_rcu_suspicious (kernel/locking/lockdep.c:6863)
fib_netdev_event (./include/linux/inetdevice.h:256 net/ipv4/fib_frontend.c:1508)
notifier_call_chain (kernel/notifier.c:85)
__dev_close_many (net/core/dev.c:1732 (discriminator 3))
? __pfx___dev_close_many (net/core/dev.c:1720)
? __mutex_lock (./arch/x86/include/asm/preempt.h:104
kernel/locking/mutex.c:713 kernel/locking/mutex.c:732)
dev_close_many (net/core/dev.c:1786)
? __pfx_dev_close_many (net/core/dev.c:1776)
netif_close (./include/linux/list.h:124 ./include/linux/list.h:215
./include/linux/list.h:229 net/core/dev.c:1802 net/core/dev.c:1795)
? __pfx_netif_close (net/core/dev.c:1796)
? mark_held_locks (kernel/locking/lockdep.c:4326)
bnxt_shutdown (drivers/net/ethernet/broadcom/bnxt/bnxt.c:16707) bnxt_en
pci_device_shutdown (drivers/pci/pci-driver.c:511)
device_shutdown (drivers/base/core.c:4820)
kernel_restart (kernel/reboot.c:271 kernel/reboot.c:285)
__do_sys_reboot (kernel/reboot.c:763)
? __pfx___do_sys_reboot (kernel/reboot.c:725)
? rseq_get_rseq_cs (kernel/rseq.c:310)
? rseq_syscall (kernel/rseq.c:465)
? __pfx_rseq_syscall (kernel/rseq.c:458)
? do_writev (fs/read_write.c:1101)
? __pfx_do_writev (fs/read_write.c:1091)
do_syscall_64 (arch/x86/entry/syscall_64.c:63 arch/x86/entry/syscall_64.c:94)
entry_SYSCALL_64_after_hwframe (arch/x86/entry/entry_64.S:130)
RIP: 0033:0x7f7f28830a07
Code: c7 c0 ff ff ff ff eb be 66 2e 0f 1f 84 00 00 00 00 00 90 f3 0f
1e fa 89 fa be 69 19 12 28 bf ad de e1 fe b8 a9 00 00 00 0f 05 <48> 3d
008
All code
========
0: c7 c0 ff ff ff ff mov $0xffffffff,%eax
6: eb be jmp 0xffffffffffffffc6
8: 66 2e 0f 1f 84 00 00 cs nopw 0x0(%rax,%rax,1)
f: 00 00 00
12: 90 nop
13: f3 0f 1e fa endbr64
17: 89 fa mov %edi,%edx
19: be 69 19 12 28 mov $0x28121969,%esi
1e: bf ad de e1 fe mov $0xfee1dead,%edi
23: b8 a9 00 00 00 mov $0xa9,%eax
28: 0f 05 syscall
2a:* 48 rex.W <-- trapping instruction
2b: 3d .byte 0x3d
2c: 08 .byte 0x8
Code starting with the faulting instruction
===========================================
0: 48 rex.W
1: 3d .byte 0x3d
2: 08 .byte 0x8
RSP: 002b:00007ffc65d6b1a8 EFLAGS: 00000246 ORIG_RAX: 00000000000000a9
RAX: ffffffffffffffda RBX: 0000000000000003 RCX: 00007f7f28830a07
RDX: 0000000001234567 RSI: 0000000028121969 RDI: 00000000fee1dead
RBP: 00007ffc65d6b3e0 R08: 0000000000000069 R09: 0000000000000000
R10: 0000000000000000 R11: 0000000000000246 R12: 0000000000000000
R13: 0000000000000000 R14: 0000000000000000 R15: 0000000001234567
</TASK>
=============================
WARNING: suspicious RCU usage
6.14.0+ #2 Tainted: G W
-----------------------------
./include/net/addrconf.h:347 suspicious rcu_dereference_check() usage!
other info that might help us debug this:
rcu_scheduler_active = 2, debug_locks = 1
4 locks held by shutdown/1:
#0: ffffffffa4d58750 (system_transition_mutex){+.+.}-{4:4}, at:
__do_sys_reboot (kernel/reboot.c:760)
#1: ffff888114d0c1b8 (&dev->mutex){....}-{4:4}, at: device_shutdown
(./include/linux/device.h:922 drivers/base/core.c:4802)
#2: ffff8881152211b8 (&dev->mutex){....}-{4:4}, at: device_shutdown
(./include/linux/pm_runtime.h:121 drivers/base/core.c:4805)
#3: ffff888178e24d90 (&dev->lock){+.+.}-{4:4}, at: bnxt_shutdown
(drivers/net/ethernet/broadcom/bnxt/bnxt.c:16703) bnxt_en
stack backtrace:
CPU: 0 UID: 0 PID: 1 Comm: shutdown Tainted: G W
6.14.0+ #2 PREEMPT(undef) 271a3d276f79e3bb26d6065917556e94aae0d88d
Tainted: [W]=WARN
Hardware name: ASUS System Product Name/PRIME Z690-P D4, BIOS 0603 11/01/2021
Call Trace:
<TASK>
dump_stack_lvl (lib/dump_stack.c:123)
lockdep_rcu_suspicious (kernel/locking/lockdep.c:6863)
addrconf_notify (./include/net/addrconf.h:347
./include/net/addrconf.h:345 net/ipv6/addrconf.c:3641)
? ip6mr_device_event (net/ipv6/ip6mr.c:1277)
? fib_netdev_event (./include/linux/inetdevice.h:256
net/ipv4/fib_frontend.c:1508)
notifier_call_chain (kernel/notifier.c:85)
__dev_close_many (net/core/dev.c:1732 (discriminator 3))
? __pfx___dev_close_many (net/core/dev.c:1720)
? __mutex_lock (./arch/x86/include/asm/preempt.h:104
kernel/locking/mutex.c:713 kernel/locking/mutex.c:732)
dev_close_many (net/core/dev.c:1786)
? __pfx_dev_close_many (net/core/dev.c:1776)
netif_close (./include/linux/list.h:124 ./include/linux/list.h:215
./include/linux/list.h:229 net/core/dev.c:1802 net/core/dev.c:1795)
? __pfx_netif_close (net/core/dev.c:1796)
? mark_held_locks (kernel/locking/lockdep.c:4326)
bnxt_shutdown (drivers/net/ethernet/broadcom/bnxt/bnxt.c:16707) bnxt_en
pci_device_shutdown (drivers/pci/pci-driver.c:511)
device_shutdown (drivers/base/core.c:4820)
kernel_restart (kernel/reboot.c:271 kernel/reboot.c:285)
__do_sys_reboot (kernel/reboot.c:763)
? __pfx___do_sys_reboot (kernel/reboot.c:725)
? rseq_get_rseq_cs (kernel/rseq.c:310)
? rseq_syscall (kernel/rseq.c:465)
? __pfx_rseq_syscall (kernel/rseq.c:458)
? do_writev (fs/read_write.c:1101)
? __pfx_do_writev (fs/read_write.c:1091)
do_syscall_64 (arch/x86/entry/syscall_64.c:63 arch/x86/entry/syscall_64.c:94)
entry_SYSCALL_64_after_hwframe (arch/x86/entry/entry_64.S:130)
RIP: 0033:0x7f7f28830a07
Code: c7 c0 ff ff ff ff eb be 66 2e 0f 1f 84 00 00 00 00 00 90 f3 0f
1e fa 89 fa be 69 19 12 28 bf ad de e1 fe b8 a9 00 00 00 0f 05 <48> 3d
008
All code
========
0: c7 c0 ff ff ff ff mov $0xffffffff,%eax
6: eb be jmp 0xffffffffffffffc6
8: 66 2e 0f 1f 84 00 00 cs nopw 0x0(%rax,%rax,1)
f: 00 00 00
12: 90 nop
13: f3 0f 1e fa endbr64
17: 89 fa mov %edi,%edx
19: be 69 19 12 28 mov $0x28121969,%esi
1e: bf ad de e1 fe mov $0xfee1dead,%edi
23: b8 a9 00 00 00 mov $0xa9,%eax
28: 0f 05 syscall
2a:* 48 rex.W <-- trapping instruction
2b: 3d .byte 0x3d
2c: 08 .byte 0x8
Code starting with the faulting instruction
===========================================
0: 48 rex.W
1: 3d .byte 0x3d
2: 08 .byte 0x8
RSP: 002b:00007ffc65d6b1a8 EFLAGS: 00000246 ORIG_RAX: 00000000000000a9
RAX: ffffffffffffffda RBX: 0000000000000003 RCX: 00007f7f28830a07
RDX: 0000000001234567 RSI: 0000000028121969 RDI: 00000000fee1dead
RBP: 00007ffc65d6b3e0 R08: 0000000000000069 R09: 0000000000000000
R10: 0000000000000000 R11: 0000000000000246 R12: 0000000000000000
R13: 0000000000000000 R14: 0000000000000000 R15: 0000000001234567
</TASK>
=============================
WARNING: suspicious RCU usage
6.14.0+ #2 Tainted: G W
-----------------------------
./include/net/addrconf.h:347 suspicious rcu_dereference_check() usage!
other info that might help us debug this:
rcu_scheduler_active = 2, debug_locks = 1
4 locks held by shutdown/1:
#0: ffffffffa4d58750 (system_transition_mutex){+.+.}-{4:4}, at:
__do_sys_reboot (kernel/reboot.c:760)
#1: ffff888114d0c1b8 (&dev->mutex){....}-{4:4}, at: device_shutdown
(./include/linux/device.h:922 drivers/base/core.c:4802)
#2: ffff8881152211b8 (&dev->mutex){....}-{4:4}, at: device_shutdown
(./include/linux/pm_runtime.h:121 drivers/base/core.c:4805)
#3: ffff888178e24d90 (&dev->lock){+.+.}-{4:4}, at: bnxt_shutdown
(drivers/net/ethernet/broadcom/bnxt/bnxt.c:16703) bnxt_en
stack backtrace:
CPU: 0 UID: 0 PID: 1 Comm: shutdown Tainted: G W
6.14.0+ #2 PREEMPT(undef) 271a3d276f79e3bb26d6065917556e94aae0d88d
Tainted: [W]=WARN
Hardware name: ASUS System Product Name/PRIME Z690-P D4, BIOS 0603 11/01/2021
Call Trace:
<TASK>
dump_stack_lvl (lib/dump_stack.c:123)
lockdep_rcu_suspicious (kernel/locking/lockdep.c:6863)
ipv6_mc_netdev_event (./include/net/addrconf.h:347
./include/net/addrconf.h:345 net/ipv6/mcast.c:2888)
notifier_call_chain (kernel/notifier.c:85)
__dev_close_many (net/core/dev.c:1732 (discriminator 3))
? __pfx___dev_close_many (net/core/dev.c:1720)
? __mutex_lock (./arch/x86/include/asm/preempt.h:104
kernel/locking/mutex.c:713 kernel/locking/mutex.c:732)
dev_close_many (net/core/dev.c:1786)
? __pfx_dev_close_many (net/core/dev.c:1776)
netif_close (./include/linux/list.h:124 ./include/linux/list.h:215
./include/linux/list.h:229 net/core/dev.c:1802 net/core/dev.c:1795)
? __pfx_netif_close (net/core/dev.c:1796)
? mark_held_locks (kernel/locking/lockdep.c:4326)
bnxt_shutdown (drivers/net/ethernet/broadcom/bnxt/bnxt.c:16707) bnxt_en
pci_device_shutdown (drivers/pci/pci-driver.c:511)
device_shutdown (drivers/base/core.c:4820)
kernel_restart (kernel/reboot.c:271 kernel/reboot.c:285)
__do_sys_reboot (kernel/reboot.c:763)
? __pfx___do_sys_reboot (kernel/reboot.c:725)
? rseq_get_rseq_cs (kernel/rseq.c:310)
? rseq_syscall (kernel/rseq.c:465)
? __pfx_rseq_syscall (kernel/rseq.c:458)
? do_writev (fs/read_write.c:1101)
? __pfx_do_writev (fs/read_write.c:1091)
do_syscall_64 (arch/x86/entry/syscall_64.c:63 arch/x86/entry/syscall_64.c:94)
entry_SYSCALL_64_after_hwframe (arch/x86/entry/entry_64.S:130)
RIP: 0033:0x7f7f28830a07
Code: c7 c0 ff ff ff ff eb be 66 2e 0f 1f 84 00 00 00 00 00 90 f3 0f
1e fa 89 fa be 69 19 12 28 bf ad de e1 fe b8 a9 00 00 00 0f 05 <48> 3d
008
All code
========
0: c7 c0 ff ff ff ff mov $0xffffffff,%eax
6: eb be jmp 0xffffffffffffffc6
8: 66 2e 0f 1f 84 00 00 cs nopw 0x0(%rax,%rax,1)
f: 00 00 00
12: 90 nop
13: f3 0f 1e fa endbr64
17: 89 fa mov %edi,%edx
19: be 69 19 12 28 mov $0x28121969,%esi
1e: bf ad de e1 fe mov $0xfee1dead,%edi
23: b8 a9 00 00 00 mov $0xa9,%eax
28: 0f 05 syscall
2a:* 48 rex.W <-- trapping instruction
2b: 3d .byte 0x3d
2c: 08 .byte 0x8
Code starting with the faulting instruction
===========================================
0: 48 rex.W
1: 3d .byte 0x3d
2: 08 .byte 0x8
RSP: 002b:00007ffc65d6b1a8 EFLAGS: 00000246 ORIG_RAX: 00000000000000a9
RAX: ffffffffffffffda RBX: 0000000000000003 RCX: 00007f7f28830a07
RDX: 0000000001234567 RSI: 0000000028121969 RDI: 00000000fee1dead
RBP: 00007ffc65d6b3e0 R08: 0000000000000069 R09: 0000000000000000
R10: 0000000000000000 R11: 0000000000000246 R12: 0000000000000000
R13: 0000000000000000 R14: 0000000000000000 R15: 0000000001234567
</TASK>
=============================
WARNING: suspicious RCU usage
6.14.0+ #2 Tainted: G W
-----------------------------
net/sched/sch_generic.c:1285 suspicious rcu_dereference_protected() usage!
other info that might help us debug this:
rcu_scheduler_active = 2, debug_locks = 1
4 locks held by shutdown/1:
#0: ffffffffa4d58750 (system_transition_mutex){+.+.}-{4:4}, at:
__do_sys_reboot (kernel/reboot.c:760)
#1: ffff888114d0c1b8 (&dev->mutex){....}-{4:4}, at: device_shutdown
(./include/linux/device.h:922 drivers/base/core.c:4802)
#2: ffff8881152211b8 (&dev->mutex){....}-{4:4}, at: device_shutdown
(./include/linux/pm_runtime.h:121 drivers/base/core.c:4805)
#3: ffff888178e24d90 (&dev->lock){+.+.}-{4:4}, at: bnxt_shutdown
(drivers/net/ethernet/broadcom/bnxt/bnxt.c:16703) bnxt_en
stack backtrace:
CPU: 0 UID: 0 PID: 1 Comm: shutdown Tainted: G W
6.14.0+ #2 PREEMPT(undef) 271a3d276f79e3bb26d6065917556e94aae0d88d
Tainted: [W]=WARN
Hardware name: ASUS System Product Name/PRIME Z690-P D4, BIOS 0603 11/01/2021
Call Trace:
<TASK>
dump_stack_lvl (lib/dump_stack.c:123)
lockdep_rcu_suspicious (kernel/locking/lockdep.c:6863)
dev_deactivate_queue (net/sched/sch_generic.c:1285 (discriminator 7))
dev_deactivate_many (./include/linux/netdevice.h:2650
net/sched/sch_generic.c:1361)
? preempt_count_add (./include/linux/ftrace.h:1089
kernel/sched/core.c:5822 kernel/sched/core.c:5819
kernel/sched/core.c:5847)
? __pfx_dev_deactivate_many (net/sched/sch_generic.c:1356)
? notifier_call_chain (kernel/notifier.c:85)
__dev_close_many (net/core/dev.c:1745)
? __pfx___dev_close_many (net/core/dev.c:1720)
? __mutex_lock (./arch/x86/include/asm/preempt.h:104
kernel/locking/mutex.c:713 kernel/locking/mutex.c:732)
dev_close_many (net/core/dev.c:1786)
? __pfx_dev_close_many (net/core/dev.c:1776)
netif_close (./include/linux/list.h:124 ./include/linux/list.h:215
./include/linux/list.h:229 net/core/dev.c:1802 net/core/dev.c:1795)
? __pfx_netif_close (net/core/dev.c:1796)
? mark_held_locks (kernel/locking/lockdep.c:4326)
bnxt_shutdown (drivers/net/ethernet/broadcom/bnxt/bnxt.c:16707) bnxt_en
pci_device_shutdown (drivers/pci/pci-driver.c:511)
device_shutdown (drivers/base/core.c:4820)
kernel_restart (kernel/reboot.c:271 kernel/reboot.c:285)
__do_sys_reboot (kernel/reboot.c:763)
? __pfx___do_sys_reboot (kernel/reboot.c:725)
? rseq_get_rseq_cs (kernel/rseq.c:310)
? rseq_syscall (kernel/rseq.c:465)
? __pfx_rseq_syscall (kernel/rseq.c:458)
? do_writev (fs/read_write.c:1101)
? __pfx_do_writev (fs/read_write.c:1091)
do_syscall_64 (arch/x86/entry/syscall_64.c:63 arch/x86/entry/syscall_64.c:94)
entry_SYSCALL_64_after_hwframe (arch/x86/entry/entry_64.S:130)
RIP: 0033:0x7f7f28830a07
Code: c7 c0 ff ff ff ff eb be 66 2e 0f 1f 84 00 00 00 00 00 90 f3 0f
1e fa 89 fa be 69 19 12 28 bf ad de e1 fe b8 a9 00 00 00 0f 05 <48> 3d
008
All code
========
0: c7 c0 ff ff ff ff mov $0xffffffff,%eax
6: eb be jmp 0xffffffffffffffc6
8: 66 2e 0f 1f 84 00 00 cs nopw 0x0(%rax,%rax,1)
f: 00 00 00
12: 90 nop
13: f3 0f 1e fa endbr64
17: 89 fa mov %edi,%edx
19: be 69 19 12 28 mov $0x28121969,%esi
1e: bf ad de e1 fe mov $0xfee1dead,%edi
23: b8 a9 00 00 00 mov $0xa9,%eax
28: 0f 05 syscall
2a:* 48 rex.W <-- trapping instruction
2b: 3d .byte 0x3d
2c: 08 .byte 0x8
Code starting with the faulting instruction
===========================================
0: 48 rex.W
1: 3d .byte 0x3d
2: 08 .byte 0x8
RSP: 002b:00007ffc65d6b1a8 EFLAGS: 00000246 ORIG_RAX: 00000000000000a9
RAX: ffffffffffffffda RBX: 0000000000000003 RCX: 00007f7f28830a07
RDX: 0000000001234567 RSI: 0000000028121969 RDI: 00000000fee1dead
RBP: 00007ffc65d6b3e0 R08: 0000000000000069 R09: 0000000000000000
R10: 0000000000000000 R11: 0000000000000246 R12: 0000000000000000
R13: 0000000000000000 R14: 0000000000000000 R15: 0000000001234567
</TASK>
=============================
WARNING: suspicious RCU usage
6.14.0+ #2 Tainted: G W
-----------------------------
./include/linux/rtnetlink.h:163 suspicious rcu_dereference_protected() usage!
other info that might help us debug this:
rcu_scheduler_active = 2, debug_locks = 1
4 locks held by shutdown/1:
#0: ffffffffa4d58750 (system_transition_mutex){+.+.}-{4:4}, at:
__do_sys_reboot (kernel/reboot.c:760)
#1: ffff888114d0c1b8 (&dev->mutex){....}-{4:4}, at: device_shutdown
(./include/linux/device.h:922 drivers/base/core.c:4802)
#2: ffff8881152211b8 (&dev->mutex){....}-{4:4}, at: device_shutdown
(./include/linux/pm_runtime.h:121 drivers/base/core.c:4805)
#3: ffff888178e24d90 (&dev->lock){+.+.}-{4:4}, at: bnxt_shutdown
(drivers/net/ethernet/broadcom/bnxt/bnxt.c:16703) bnxt_en
stack backtrace:
CPU: 0 UID: 0 PID: 1 Comm: shutdown Tainted: G W
6.14.0+ #2 PREEMPT(undef) 271a3d276f79e3bb26d6065917556e94aae0d88d
Tainted: [W]=WARN
Hardware name: ASUS System Product Name/PRIME Z690-P D4, BIOS 0603 11/01/2021
Call Trace:
<TASK>
dump_stack_lvl (lib/dump_stack.c:123)
lockdep_rcu_suspicious (kernel/locking/lockdep.c:6863)
dev_deactivate_many (./include/linux/rtnetlink.h:163
net/sched/sch_generic.c:1363)
? preempt_count_add (./include/linux/ftrace.h:1089
kernel/sched/core.c:5822 kernel/sched/core.c:5819
kernel/sched/core.c:5847)
? __pfx_dev_deactivate_many (net/sched/sch_generic.c:1356)
? notifier_call_chain (kernel/notifier.c:85)
__dev_close_many (net/core/dev.c:1745)
? __pfx___dev_close_many (net/core/dev.c:1720)
? __mutex_lock (./arch/x86/include/asm/preempt.h:104
kernel/locking/mutex.c:713 kernel/locking/mutex.c:732)
dev_close_many (net/core/dev.c:1786)
? __pfx_dev_close_many (net/core/dev.c:1776)
netif_close (./include/linux/list.h:124 ./include/linux/list.h:215
./include/linux/list.h:229 net/core/dev.c:1802 net/core/dev.c:1795)
? __pfx_netif_close (net/core/dev.c:1796)
? mark_held_locks (kernel/locking/lockdep.c:4326)
bnxt_shutdown (drivers/net/ethernet/broadcom/bnxt/bnxt.c:16707) bnxt_en
pci_device_shutdown (drivers/pci/pci-driver.c:511)
device_shutdown (drivers/base/core.c:4820)
kernel_restart (kernel/reboot.c:271 kernel/reboot.c:285)
__do_sys_reboot (kernel/reboot.c:763)
? __pfx___do_sys_reboot (kernel/reboot.c:725)
? rseq_get_rseq_cs (kernel/rseq.c:310)
? rseq_syscall (kernel/rseq.c:465)
? __pfx_rseq_syscall (kernel/rseq.c:458)
? do_writev (fs/read_write.c:1101)
? __pfx_do_writev (fs/read_write.c:1091)
do_syscall_64 (arch/x86/entry/syscall_64.c:63 arch/x86/entry/syscall_64.c:94)
entry_SYSCALL_64_after_hwframe (arch/x86/entry/entry_64.S:130)
RIP: 0033:0x7f7f28830a07
Code: c7 c0 ff ff ff ff eb be 66 2e 0f 1f 84 00 00 00 00 00 90 f3 0f
1e fa 89 fa be 69 19 12 28 bf ad de e1 fe b8 a9 00 00 00 0f 05 <48> 3d
008
All code
========
0: c7 c0 ff ff ff ff mov $0xffffffff,%eax
6: eb be jmp 0xffffffffffffffc6
8: 66 2e 0f 1f 84 00 00 cs nopw 0x0(%rax,%rax,1)
f: 00 00 00
12: 90 nop
13: f3 0f 1e fa endbr64
17: 89 fa mov %edi,%edx
19: be 69 19 12 28 mov $0x28121969,%esi
1e: bf ad de e1 fe mov $0xfee1dead,%edi
23: b8 a9 00 00 00 mov $0xa9,%eax
28: 0f 05 syscall
2a:* 48 rex.W <-- trapping instruction
2b: 3d .byte 0x3d
2c: 08 .byte 0x8
Code starting with the faulting instruction
===========================================
0: 48 rex.W
1: 3d .byte 0x3d
2: 08 .byte 0x8
RSP: 002b:00007ffc65d6b1a8 EFLAGS: 00000246 ORIG_RAX: 00000000000000a9
RAX: ffffffffffffffda RBX: 0000000000000003 RCX: 00007f7f28830a07
RDX: 0000000001234567 RSI: 0000000028121969 RDI: 00000000fee1dead
RBP: 00007ffc65d6b3e0 R08: 0000000000000069 R09: 0000000000000000
R10: 0000000000000000 R11: 0000000000000246 R12: 0000000000000000
R13: 0000000000000000 R14: 0000000000000000 R15: 0000000001234567
</TASK>
=============================
WARNING: suspicious RCU usage
6.14.0+ #2 Tainted: G W
-----------------------------
net/sched/sch_generic.c:1301 suspicious rcu_dereference_protected() usage!
other info that might help us debug this:
rcu_scheduler_active = 2, debug_locks = 1
4 locks held by shutdown/1:
#0: ffffffffa4d58750 (system_transition_mutex){+.+.}-{4:4}, at:
__do_sys_reboot (kernel/reboot.c:760)
#1: ffff888114d0c1b8 (&dev->mutex){....}-{4:4}, at: device_shutdown
(./include/linux/device.h:922 drivers/base/core.c:4802)
#2: ffff8881152211b8 (&dev->mutex){....}-{4:4}, at: device_shutdown
(./include/linux/pm_runtime.h:121 drivers/base/core.c:4805)
#3: ffff888178e24d90 (&dev->lock){+.+.}-{4:4}, at: bnxt_shutdown
(drivers/net/ethernet/broadcom/bnxt/bnxt.c:16703) bnxt_en
stack backtrace:
CPU: 0 UID: 0 PID: 1 Comm: shutdown Tainted: G W
6.14.0+ #2 PREEMPT(undef) 271a3d276f79e3bb26d6065917556e94aae0d88d
Tainted: [W]=WARN
Hardware name: ASUS System Product Name/PRIME Z690-P D4, BIOS 0603 11/01/2021
Call Trace:
<TASK>
dump_stack_lvl (lib/dump_stack.c:123)
lockdep_rcu_suspicious (kernel/locking/lockdep.c:6863)
dev_reset_queue (net/sched/sch_generic.c:1301 (discriminator 7))
dev_deactivate_many (./include/linux/netdevice.h:2650
net/sched/sch_generic.c:1375)
? preempt_count_add (./include/linux/ftrace.h:1089
kernel/sched/core.c:5822 kernel/sched/core.c:5819
kernel/sched/core.c:5847)
? __pfx_dev_deactivate_many (net/sched/sch_generic.c:1356)
? notifier_call_chain (kernel/notifier.c:85)
__dev_close_many (net/core/dev.c:1745)
? __pfx___dev_close_many (net/core/dev.c:1720)
? __mutex_lock (./arch/x86/include/asm/preempt.h:104
kernel/locking/mutex.c:713 kernel/locking/mutex.c:732)
dev_close_many (net/core/dev.c:1786)
? __pfx_dev_close_many (net/core/dev.c:1776)
netif_close (./include/linux/list.h:124 ./include/linux/list.h:215
./include/linux/list.h:229 net/core/dev.c:1802 net/core/dev.c:1795)
? __pfx_netif_close (net/core/dev.c:1796)
? mark_held_locks (kernel/locking/lockdep.c:4326)
bnxt_shutdown (drivers/net/ethernet/broadcom/bnxt/bnxt.c:16707) bnxt_en
pci_device_shutdown (drivers/pci/pci-driver.c:511)
device_shutdown (drivers/base/core.c:4820)
kernel_restart (kernel/reboot.c:271 kernel/reboot.c:285)
__do_sys_reboot (kernel/reboot.c:763)
? __pfx___do_sys_reboot (kernel/reboot.c:725)
? rseq_get_rseq_cs (kernel/rseq.c:310)
? rseq_syscall (kernel/rseq.c:465)
? __pfx_rseq_syscall (kernel/rseq.c:458)
? do_writev (fs/read_write.c:1101)
? __pfx_do_writev (fs/read_write.c:1091)
do_syscall_64 (arch/x86/entry/syscall_64.c:63 arch/x86/entry/syscall_64.c:94)
entry_SYSCALL_64_after_hwframe (arch/x86/entry/entry_64.S:130)
RIP: 0033:0x7f7f28830a07
Code: c7 c0 ff ff ff ff eb be 66 2e 0f 1f 84 00 00 00 00 00 90 f3 0f
1e fa 89 fa be 69 19 12 28 bf ad de e1 fe b8 a9 00 00 00 0f 05 <48> 3d
008
All code
========
0: c7 c0 ff ff ff ff mov $0xffffffff,%eax
6: eb be jmp 0xffffffffffffffc6
8: 66 2e 0f 1f 84 00 00 cs nopw 0x0(%rax,%rax,1)
f: 00 00 00
12: 90 nop
13: f3 0f 1e fa endbr64
17: 89 fa mov %edi,%edx
19: be 69 19 12 28 mov $0x28121969,%esi
1e: bf ad de e1 fe mov $0xfee1dead,%edi
23: b8 a9 00 00 00 mov $0xa9,%eax
28: 0f 05 syscall
2a:* 48 rex.W <-- trapping instruction
2b: 3d .byte 0x3d
2c: 08 .byte 0x8
Code starting with the faulting instruction
===========================================
0: 48 rex.W
1: 3d .byte 0x3d
2: 08 .byte 0x8
RSP: 002b:00007ffc65d6b1a8 EFLAGS: 00000246 ORIG_RAX: 00000000000000a9
RAX: ffffffffffffffda RBX: 0000000000000003 RCX: 00007f7f28830a07
RDX: 0000000001234567 RSI: 0000000028121969 RDI: 00000000fee1dead
RBP: 00007ffc65d6b3e0 R08: 0000000000000069 R09: 0000000000000000
R10: 0000000000000000 R11: 0000000000000246 R12: 0000000000000000
R13: 0000000000000000 R14: 0000000000000000 R15: 0000000001234567
</TASK>
=============================
WARNING: suspicious RCU usage
6.14.0+ #2 Tainted: G W
-----------------------------
net/sched/sch_generic.c:1332 suspicious rcu_dereference_protected() usage!
other info that might help us debug this:
rcu_scheduler_active = 2, debug_locks = 1
4 locks held by shutdown/1:
#0: ffffffffa4d58750 (system_transition_mutex){+.+.}-{4:4}, at:
__do_sys_reboot (kernel/reboot.c:760)
#1: ffff888114d0c1b8 (&dev->mutex){....}-{4:4}, at: device_shutdown
(./include/linux/device.h:922 drivers/base/core.c:4802)
#2: ffff8881152211b8 (&dev->mutex){....}-{4:4}, at: device_shutdown
(./include/linux/pm_runtime.h:121 drivers/base/core.c:4805)
#3: ffff888178e24d90 (&dev->lock){+.+.}-{4:4}, at: bnxt_shutdown
(drivers/net/ethernet/broadcom/bnxt/bnxt.c:16703) bnxt_en
stack backtrace:
CPU: 0 UID: 0 PID: 1 Comm: shutdown Tainted: G W
6.14.0+ #2 PREEMPT(undef) 271a3d276f79e3bb26d6065917556e94aae0d88d
Tainted: [W]=WARN
Hardware name: ASUS System Product Name/PRIME Z690-P D4, BIOS 0603 11/01/2021
Call Trace:
<TASK>
dump_stack_lvl (lib/dump_stack.c:123)
lockdep_rcu_suspicious (kernel/locking/lockdep.c:6863)
dev_deactivate_many (net/sched/sch_generic.c:1332 net/sched/sch_generic.c:1383)
? __pfx_dev_deactivate_many (net/sched/sch_generic.c:1356)
? notifier_call_chain (kernel/notifier.c:85)
__dev_close_many (net/core/dev.c:1745)
? __pfx___dev_close_many (net/core/dev.c:1720)
? __mutex_lock (./arch/x86/include/asm/preempt.h:104
kernel/locking/mutex.c:713 kernel/locking/mutex.c:732)
dev_close_many (net/core/dev.c:1786)
? __pfx_dev_close_many (net/core/dev.c:1776)
netif_close (./include/linux/list.h:124 ./include/linux/list.h:215
./include/linux/list.h:229 net/core/dev.c:1802 net/core/dev.c:1795)
? __pfx_netif_close (net/core/dev.c:1796)
? mark_held_locks (kernel/locking/lockdep.c:4326)
bnxt_shutdown (drivers/net/ethernet/broadcom/bnxt/bnxt.c:16707) bnxt_en
pci_device_shutdown (drivers/pci/pci-driver.c:511)
device_shutdown (drivers/base/core.c:4820)
kernel_restart (kernel/reboot.c:271 kernel/reboot.c:285)
__do_sys_reboot (kernel/reboot.c:763)
? __pfx___do_sys_reboot (kernel/reboot.c:725)
? rseq_get_rseq_cs (kernel/rseq.c:310)
? rseq_syscall (kernel/rseq.c:465)
? __pfx_rseq_syscall (kernel/rseq.c:458)
? do_writev (fs/read_write.c:1101)
? __pfx_do_writev (fs/read_write.c:1091)
do_syscall_64 (arch/x86/entry/syscall_64.c:63 arch/x86/entry/syscall_64.c:94)
entry_SYSCALL_64_after_hwframe (arch/x86/entry/entry_64.S:130)
RIP: 0033:0x7f7f28830a07
Code: c7 c0 ff ff ff ff eb be 66 2e 0f 1f 84 00 00 00 00 00 90 f3 0f
1e fa 89 fa be 69 19 12 28 bf ad de e1 fe b8 a9 00 00 00 0f 05 <48> 3d
008
All code
========
0: c7 c0 ff ff ff ff mov $0xffffffff,%eax
6: eb be jmp 0xffffffffffffffc6
8: 66 2e 0f 1f 84 00 00 cs nopw 0x0(%rax,%rax,1)
f: 00 00 00
12: 90 nop
13: f3 0f 1e fa endbr64
17: 89 fa mov %edi,%edx
19: be 69 19 12 28 mov $0x28121969,%esi
1e: bf ad de e1 fe mov $0xfee1dead,%edi
23: b8 a9 00 00 00 mov $0xa9,%eax
28: 0f 05 syscall
2a:* 48 rex.W <-- trapping instruction
2b: 3d .byte 0x3d
2c: 08 .byte 0x8
Code starting with the faulting instruction
===========================================
0: 48 rex.W
1: 3d .byte 0x3d
2: 08 .byte 0x8
RSP: 002b:00007ffc65d6b1a8 EFLAGS: 00000246 ORIG_RAX: 00000000000000a9
RAX: ffffffffffffffda RBX: 0000000000000003 RCX: 00007f7f28830a07
RDX: 0000000001234567 RSI: 0000000028121969 RDI: 00000000fee1dead
RBP: 00007ffc65d6b3e0 R08: 0000000000000069 R09: 0000000000000000
R10: 0000000000000000 R11: 0000000000000246 R12: 0000000000000000
R13: 0000000000000000 R14: 0000000000000000 R15: 0000000001234567
</TASK>
=============================
WARNING: suspicious RCU usage
6.14.0+ #2 Tainted: G W
-----------------------------
net/core/netpoll.c:229 suspicious rcu_dereference_protected() usage!
other info that might help us debug this:
rcu_scheduler_active = 2, debug_locks = 1
4 locks held by shutdown/1:
#0: ffffffffa4d58750 (system_transition_mutex){+.+.}-{4:4}, at:
__do_sys_reboot (kernel/reboot.c:760)
#1: ffff888114d0c1b8 (&dev->mutex){....}-{4:4}, at: device_shutdown
(./include/linux/device.h:922 drivers/base/core.c:4802)
#2: ffff8881152211b8 (&dev->mutex){....}-{4:4}, at: device_shutdown
(./include/linux/pm_runtime.h:121 drivers/base/core.c:4805)
#3: ffff888178e24d90 (&dev->lock){+.+.}-{4:4}, at: bnxt_shutdown
(drivers/net/ethernet/broadcom/bnxt/bnxt.c:16703) bnxt_en
stack backtrace:
CPU: 0 UID: 0 PID: 1 Comm: shutdown Tainted: G W
6.14.0+ #2 PREEMPT(undef) 271a3d276f79e3bb26d6065917556e94aae0d88d
Tainted: [W]=WARN
Hardware name: ASUS System Product Name/PRIME Z690-P D4, BIOS 0603 11/01/2021
Call Trace:
<TASK>
dump_stack_lvl (lib/dump_stack.c:123)
lockdep_rcu_suspicious (kernel/locking/lockdep.c:6863)
netpoll_poll_enable (net/core/netpoll.c:229 (discriminator 7))
__dev_close_many (net/core/dev.c:1745)
? __pfx___dev_close_many (net/core/dev.c:1720)
? __mutex_lock (./arch/x86/include/asm/preempt.h:104
kernel/locking/mutex.c:713 kernel/locking/mutex.c:732)
dev_close_many (net/core/dev.c:1786)
? __pfx_dev_close_many (net/core/dev.c:1776)
netif_close (./include/linux/list.h:124 ./include/linux/list.h:215
./include/linux/list.h:229 net/core/dev.c:1802 net/core/dev.c:1795)
? __pfx_netif_close (net/core/dev.c:1796)
? mark_held_locks (kernel/locking/lockdep.c:4326)
bnxt_shutdown (drivers/net/ethernet/broadcom/bnxt/bnxt.c:16707) bnxt_en
pci_device_shutdown (drivers/pci/pci-driver.c:511)
device_shutdown (drivers/base/core.c:4820)
kernel_restart (kernel/reboot.c:271 kernel/reboot.c:285)
__do_sys_reboot (kernel/reboot.c:763)
? __pfx___do_sys_reboot (kernel/reboot.c:725)
? rseq_get_rseq_cs (kernel/rseq.c:310)
? rseq_syscall (kernel/rseq.c:465)
? __pfx_rseq_syscall (kernel/rseq.c:458)
? do_writev (fs/read_write.c:1101)
? __pfx_do_writev (fs/read_write.c:1091)
do_syscall_64 (arch/x86/entry/syscall_64.c:63 arch/x86/entry/syscall_64.c:94)
entry_SYSCALL_64_after_hwframe (arch/x86/entry/entry_64.S:130)
RIP: 0033:0x7f7f28830a07
Code: c7 c0 ff ff ff ff eb be 66 2e 0f 1f 84 00 00 00 00 00 90 f3 0f
1e fa 89 fa be 69 19 12 28 bf ad de e1 fe b8 a9 00 00 00 0f 05 <48> 3d
008
All code
========
0: c7 c0 ff ff ff ff mov $0xffffffff,%eax
6: eb be jmp 0xffffffffffffffc6
8: 66 2e 0f 1f 84 00 00 cs nopw 0x0(%rax,%rax,1)
f: 00 00 00
12: 90 nop
13: f3 0f 1e fa endbr64
17: 89 fa mov %edi,%edx
19: be 69 19 12 28 mov $0x28121969,%esi
1e: bf ad de e1 fe mov $0xfee1dead,%edi
23: b8 a9 00 00 00 mov $0xa9,%eax
28: 0f 05 syscall
2a:* 48 rex.W <-- trapping instruction
2b: 3d .byte 0x3d
2c: 08 .byte 0x8
Code starting with the faulting instruction
===========================================
0: 48 rex.W
1: 3d .byte 0x3d
2: 08 .byte 0x8
RSP: 002b:00007ffc65d6b1a8 EFLAGS: 00000246 ORIG_RAX: 00000000000000a9
RAX: ffffffffffffffda RBX: 0000000000000003 RCX: 00007f7f28830a07
RDX: 0000000001234567 RSI: 0000000028121969 RDI: 00000000fee1dead
RBP: 00007ffc65d6b3e0 R08: 0000000000000069 R09: 0000000000000000
R10: 0000000000000000 R11: 0000000000000246 R12: 0000000000000000
R13: 0000000000000000 R14: 0000000000000000 R15: 0000000001234567
</TASK>
=============================
WARNING: suspicious RCU usage
6.14.0+ #2 Tainted: G W
-----------------------------
drivers/dpll/dpll_netlink.c:71 suspicious rcu_dereference_check() usage!
other info that might help us debug this:
rcu_scheduler_active = 2, debug_locks = 1
4 locks held by shutdown/1:
#0: ffffffffa4d58750 (system_transition_mutex){+.+.}-{4:4}, at:
__do_sys_reboot (kernel/reboot.c:760)
#1: ffff888114d0c1b8 (&dev->mutex){....}-{4:4}, at: device_shutdown
(./include/linux/device.h:922 drivers/base/core.c:4802)
#2: ffff8881152211b8 (&dev->mutex){....}-{4:4}, at: device_shutdown
(./include/linux/pm_runtime.h:121 drivers/base/core.c:4805)
#3: ffff888178e24d90 (&dev->lock){+.+.}-{4:4}, at: bnxt_shutdown
(drivers/net/ethernet/broadcom/bnxt/bnxt.c:16703) bnxt_en
stack backtrace:
CPU: 0 UID: 0 PID: 1 Comm: shutdown Tainted: G W
6.14.0+ #2 PREEMPT(undef) 271a3d276f79e3bb26d6065917556e94aae0d88d
Tainted: [W]=WARN
Hardware name: ASUS System Product Name/PRIME Z690-P D4, BIOS 0603 11/01/2021
Call Trace:
<TASK>
dump_stack_lvl (lib/dump_stack.c:123)
lockdep_rcu_suspicious (kernel/locking/lockdep.c:6863)
dpll_netdev_pin_handle_size (drivers/dpll/dpll_netlink.c:71
drivers/dpll/dpll_netlink.c:69 drivers/dpll/dpll_netlink.c:82)
if_nlmsg_size (net/core/rtnetlink.c:1263 net/core/rtnetlink.c:1325)
rtmsg_ifinfo_build_skb (./include/linux/skbuff.h:1340
./include/net/netlink.h:1019 net/core/rtnetlink.c:4400)
rtmsg_ifinfo (net/core/rtnetlink.c:4442 net/core/rtnetlink.c:4432
net/core/rtnetlink.c:4451)
dev_close_many (net/core/dev.c:2285 net/core/dev.c:2299 net/core/dev.c:1788)
? __pfx_dev_close_many (net/core/dev.c:1776)
netif_close (./include/linux/list.h:124 ./include/linux/list.h:215
./include/linux/list.h:229 net/core/dev.c:1802 net/core/dev.c:1795)
? __pfx_netif_close (net/core/dev.c:1796)
? mark_held_locks (kernel/locking/lockdep.c:4326)
bnxt_shutdown (drivers/net/ethernet/broadcom/bnxt/bnxt.c:16707) bnxt_en
pci_device_shutdown (drivers/pci/pci-driver.c:511)
device_shutdown (drivers/base/core.c:4820)
kernel_restart (kernel/reboot.c:271 kernel/reboot.c:285)
__do_sys_reboot (kernel/reboot.c:763)
? __pfx___do_sys_reboot (kernel/reboot.c:725)
? rseq_get_rseq_cs (kernel/rseq.c:310)
? rseq_syscall (kernel/rseq.c:465)
? __pfx_rseq_syscall (kernel/rseq.c:458)
? do_writev (fs/read_write.c:1101)
? __pfx_do_writev (fs/read_write.c:1091)
do_syscall_64 (arch/x86/entry/syscall_64.c:63 arch/x86/entry/syscall_64.c:94)
entry_SYSCALL_64_after_hwframe (arch/x86/entry/entry_64.S:130)
RIP: 0033:0x7f7f28830a07
Code: c7 c0 ff ff ff ff eb be 66 2e 0f 1f 84 00 00 00 00 00 90 f3 0f
1e fa 89 fa be 69 19 12 28 bf ad de e1 fe b8 a9 00 00 00 0f 05 <48> 3d
008
All code
========
0: c7 c0 ff ff ff ff mov $0xffffffff,%eax
6: eb be jmp 0xffffffffffffffc6
8: 66 2e 0f 1f 84 00 00 cs nopw 0x0(%rax,%rax,1)
f: 00 00 00
12: 90 nop
13: f3 0f 1e fa endbr64
17: 89 fa mov %edi,%edx
19: be 69 19 12 28 mov $0x28121969,%esi
1e: bf ad de e1 fe mov $0xfee1dead,%edi
23: b8 a9 00 00 00 mov $0xa9,%eax
28: 0f 05 syscall
2a:* 48 rex.W <-- trapping instruction
2b: 3d .byte 0x3d
2c: 08 .byte 0x8
Code starting with the faulting instruction
===========================================
0: 48 rex.W
1: 3d .byte 0x3d
2: 08 .byte 0x8
RSP: 002b:00007ffc65d6b1a8 EFLAGS: 00000246 ORIG_RAX: 00000000000000a9
RAX: ffffffffffffffda RBX: 0000000000000003 RCX: 00007f7f28830a07
RDX: 0000000001234567 RSI: 0000000028121969 RDI: 00000000fee1dead
RBP: 00007ffc65d6b3e0 R08: 0000000000000069 R09: 0000000000000000
R10: 0000000000000000 R11: 0000000000000246 R12: 0000000000000000
R13: 0000000000000000 R14: 0000000000000000 R15: 0000000001234567
</TASK>
------------[ cut here ]------------
RTNL: assertion failed at net/core/rtnetlink.c (2029)
WARNING: CPU: 0 PID: 1 at net/core/rtnetlink.c:2029
rtnl_fill_ifinfo.constprop.0 (net/core/rtnetlink.c:2029)
Modules linked in: xt_nat xt_tcpudp veth xt_conntrack nft_chain_nat
xt_MASQUERADE nf_conntrack_netlink xfrm_user xt_addrtype nft_compat
nf_tabs
CPU: 0 UID: 0 PID: 1 Comm: shutdown Tainted: G W
6.14.0+ #2 PREEMPT(undef) 271a3d276f79e3bb26d6065917556e94aae0d88d
Tainted: [W]=WARN
Hardware name: ASUS System Product Name/PRIME Z690-P D4, BIOS 0603 11/01/2021
RIP: 0010:rtnl_fill_ifinfo.constprop.0 (net/core/rtnetlink.c:2029)
Code: 6c c3 42 09 00 0f 85 14 e4 ff ff ba ed 07 00 00 48 c7 c6 20 1d
fe a3 48 c7 c7 60 1d fe a3 c6 05 4c c3 42 09 01 e8 f5 19 30 fe <0f> 0b
e99
All code
========
0: 6c insb (%dx),%es:(%rdi)
1: c3 ret
2: 42 09 00 rex.X or %eax,(%rax)
5: 0f 85 14 e4 ff ff jne 0xffffffffffffe41f
b: ba ed 07 00 00 mov $0x7ed,%edx
10: 48 c7 c6 20 1d fe a3 mov $0xffffffffa3fe1d20,%rsi
17: 48 c7 c7 60 1d fe a3 mov $0xffffffffa3fe1d60,%rdi
1e: c6 05 4c c3 42 09 01 movb $0x1,0x942c34c(%rip) # 0x942c371
25: e8 f5 19 30 fe call 0xfffffffffe301a1f
2a:* 0f 0b ud2 <-- trapping instruction
2c: 99 cltd
Code starting with the faulting instruction
===========================================
0: 0f 0b ud2
2: 99 cltd
RSP: 0018:ffff888104e2f890 EFLAGS: 00010282
RAX: 0000000000000000 RBX: 0000000000000010 RCX: 0000000000000000
RDX: 0000000000000002 RSI: 0000000000000004 RDI: 0000000000000001
RBP: ffff88881be2ef00 R08: 0000000000000000 R09: fffffbfff49a4af4
R10: 0000000000000003 R11: 0000000000000001 R12: 0000000000000000
R13: 0000000000000000 R14: ffff888178e24000 R15: ffff888178e24108
FS: 00007f7f27cb4440(0000) GS:ffff88886dc22000(0000) knlGS:0000000000000000
CS: 0010 DS: 0000 ES: 0000 CR0: 0000000080050033
CR2: 00007ffc65d6b0cc CR3: 00000001d73de000 CR4: 00000000007506f0
PKRU: 55555554
Call Trace:
<TASK>
? __warn (kernel/panic.c:748)
? __pfx_vprintk_emit.part.0 (kernel/printk/printk.c:2378)
? rtnl_fill_ifinfo.constprop.0 (net/core/rtnetlink.c:2029)
? report_bug (lib/bug.c:201 lib/bug.c:219)
? rtnl_fill_ifinfo.constprop.0 (net/core/rtnetlink.c:2029)
? handle_bug (arch/x86/kernel/traps.c:337)
? exc_invalid_op (arch/x86/kernel/traps.c:391 (discriminator 1))
? asm_exc_invalid_op (./arch/x86/include/asm/idtentry.h:578)
? rtnl_fill_ifinfo.constprop.0 (net/core/rtnetlink.c:2029)
? mark_held_locks (kernel/locking/lockdep.c:4326)
? _raw_spin_unlock_irqrestore (./include/linux/spinlock_api_smp.h:151
kernel/locking/spinlock.c:194)
? lockdep_hardirqs_on (kernel/locking/lockdep.c:4476 (discriminator 3))
? __pfx_rtnl_fill_ifinfo.constprop.0 (net/core/rtnetlink.c:2017)
? rcu_is_watching (./include/linux/context_tracking.h:128 kernel/rcu/tree.c:736)
? __kmalloc_node_track_caller_noprof (./include/trace/events/kmem.h:54
mm/slub.c:4319 mm/slub.c:4337)
? __alloc_skb (net/core/skbuff.c:668)
? rcu_is_watching (./include/linux/context_tracking.h:128 kernel/rcu/tree.c:736)
? kmalloc_reserve (net/core/skbuff.c:602)
? __build_skb_around (./arch/x86/include/asm/atomic.h:28
./include/linux/atomic/atomic-arch-fallback.h:503
./include/linux/atomic/atomic-instrumented.h:68 net/core/skbuff.c:380
net/core/skbuff.c:438)
? __alloc_skb (net/core/skbuff.c:684)
? __pfx___alloc_skb (net/core/skbuff.c:641)
? lockdep_rcu_suspicious (./include/linux/context_tracking.h:159
kernel/locking/lockdep.c:6864)
rtmsg_ifinfo_build_skb (net/core/rtnetlink.c:4409)
rtmsg_ifinfo (net/core/rtnetlink.c:4442 net/core/rtnetlink.c:4432
net/core/rtnetlink.c:4451)
dev_close_many (net/core/dev.c:2285 net/core/dev.c:2299 net/core/dev.c:1788)
? __pfx_dev_close_many (net/core/dev.c:1776)
netif_close (./include/linux/list.h:124 ./include/linux/list.h:215
./include/linux/list.h:229 net/core/dev.c:1802 net/core/dev.c:1795)
? __pfx_netif_close (net/core/dev.c:1796)
? mark_held_locks (kernel/locking/lockdep.c:4326)
bnxt_shutdown (drivers/net/ethernet/broadcom/bnxt/bnxt.c:16707) bnxt_en
pci_device_shutdown (drivers/pci/pci-driver.c:511)
device_shutdown (drivers/base/core.c:4820)
kernel_restart (kernel/reboot.c:271 kernel/reboot.c:285)
__do_sys_reboot (kernel/reboot.c:763)
? __pfx___do_sys_reboot (kernel/reboot.c:725)
? rseq_get_rseq_cs (kernel/rseq.c:310)
? rseq_syscall (kernel/rseq.c:465)
? __pfx_rseq_syscall (kernel/rseq.c:458)
? do_writev (fs/read_write.c:1101)
? __pfx_do_writev (fs/read_write.c:1091)
do_syscall_64 (arch/x86/entry/syscall_64.c:63 arch/x86/entry/syscall_64.c:94)
entry_SYSCALL_64_after_hwframe (arch/x86/entry/entry_64.S:130)
RIP: 0033:0x7f7f28830a07
Code: c7 c0 ff ff ff ff eb be 66 2e 0f 1f 84 00 00 00 00 00 90 f3 0f
1e fa 89 fa be 69 19 12 28 bf ad de e1 fe b8 a9 00 00 00 0f 05 <48> 3d
008
All code
========
0: c7 c0 ff ff ff ff mov $0xffffffff,%eax
6: eb be jmp 0xffffffffffffffc6
8: 66 2e 0f 1f 84 00 00 cs nopw 0x0(%rax,%rax,1)
f: 00 00 00
12: 90 nop
13: f3 0f 1e fa endbr64
17: 89 fa mov %edi,%edx
19: be 69 19 12 28 mov $0x28121969,%esi
1e: bf ad de e1 fe mov $0xfee1dead,%edi
23: b8 a9 00 00 00 mov $0xa9,%eax
28: 0f 05 syscall
2a:* 48 rex.W <-- trapping instruction
2b: 3d .byte 0x3d
2c: 08 .byte 0x8
Code starting with the faulting instruction
===========================================
0: 48 rex.W
1: 3d .byte 0x3d
2: 08 .byte 0x8
RSP: 002b:00007ffc65d6b1a8 EFLAGS: 00000246 ORIG_RAX: 00000000000000a9
RAX: ffffffffffffffda RBX: 0000000000000003 RCX: 00007f7f28830a07
RDX: 0000000001234567 RSI: 0000000028121969 RDI: 00000000fee1dead
RBP: 00007ffc65d6b3e0 R08: 0000000000000069 R09: 0000000000000000
R10: 0000000000000000 R11: 0000000000000246 R12: 0000000000000000
R13: 0000000000000000 R14: 0000000000000000 R15: 0000000001234567
</TASK>
irq event stamp: 12752209
hardirqs last enabled at (12752221): __up_console_sem
(kernel/printk/printk.c:344 (discriminator 1))
hardirqs last disabled at (12752254): __up_console_sem
(kernel/printk/printk.c:342 (discriminator 1))
softirqs last enabled at (12752286): __irq_exit_rcu
(kernel/softirq.c:596 kernel/softirq.c:435 kernel/softirq.c:662)
softirqs last disabled at (12752299): __irq_exit_rcu
(kernel/softirq.c:596 kernel/softirq.c:435 kernel/softirq.c:662)
---[ end trace 0000000000000000 ]---
------------[ cut here ]------------
RTNL: assertion failed at net/devlink/port.c (1596)
WARNING: CPU: 0 PID: 1 at net/devlink/port.c:1596
devlink_compat_phys_port_name_get (net/devlink/port.c:1596
(discriminator 3))
Modules linked in: xt_nat xt_tcpudp veth xt_conntrack nft_chain_nat
xt_MASQUERADE nf_conntrack_netlink xfrm_user xt_addrtype nft_compat
nf_tabs
CPU: 0 UID: 0 PID: 1 Comm: shutdown Tainted: G W
6.14.0+ #2 PREEMPT(undef) 271a3d276f79e3bb26d6065917556e94aae0d88d
Tainted: [W]=WARN
Hardware name: ASUS System Product Name/PRIME Z690-P D4, BIOS 0603 11/01/2021
RIP: 0010:devlink_compat_phys_port_name_get (net/devlink/port.c:1596
(discriminator 3))
Code: 57 6a d0 08 00 0f 85 48 fb ff ff ba 3c 06 00 00 48 c7 c6 80 f1
07 a4 48 c7 c7 a0 f2 07 a4 c6 05 37 6a d0 08 01 e8 f2 bf bd fd <0f> 0b
e9c
All code
========
0: 57 push %rdi
1: 6a d0 push $0xffffffffffffffd0
3: 08 00 or %al,(%rax)
5: 0f 85 48 fb ff ff jne 0xfffffffffffffb53
b: ba 3c 06 00 00 mov $0x63c,%edx
10: 48 c7 c6 80 f1 07 a4 mov $0xffffffffa407f180,%rsi
17: 48 c7 c7 a0 f2 07 a4 mov $0xffffffffa407f2a0,%rdi
1e: c6 05 37 6a d0 08 01 movb $0x1,0x8d06a37(%rip) # 0x8d06a5c
25: e8 f2 bf bd fd call 0xfffffffffdbdc01c
2a:* 0f 0b ud2 <-- trapping instruction
2c: 9c pushf
Code starting with the faulting instruction
===========================================
0: 0f 0b ud2
2: 9c pushf
RSP: 0018:ffff888104e2f858 EFLAGS: 00010292
RAX: 0000000000000000 RBX: ffff888178e24000 RCX: 0000000000000000
RDX: 0000000000000002 RSI: 0000000000000004 RDI: 0000000000000001
RBP: 0000000000000010 R08: 0000000000000000 R09: fffffbfff49a4af4
R10: 0000000000000003 R11: 0000000000000001 R12: ffff888104e2fa28
R13: ffff888104e2f9b8 R14: ffff888178e24000 R15: ffff888104e2f938
FS: 00007f7f27cb4440(0000) GS:ffff88886dc22000(0000) knlGS:0000000000000000
CS: 0010 DS: 0000 ES: 0000 CR0: 0000000080050033
CR2: 00007ffc65d6b0cc CR3: 00000001d73de000 CR4: 00000000007506f0
PKRU: 55555554
Call Trace:
<TASK>
? __warn (kernel/panic.c:748)
? devlink_compat_phys_port_name_get (net/devlink/port.c:1596 (discriminator 3))
? report_bug (lib/bug.c:201 lib/bug.c:219)
? devlink_compat_phys_port_name_get (net/devlink/port.c:1596 (discriminator 3))
? handle_bug (arch/x86/kernel/traps.c:337)
? exc_invalid_op (arch/x86/kernel/traps.c:391 (discriminator 1))
? asm_exc_invalid_op (./arch/x86/include/asm/idtentry.h:578)
? devlink_compat_phys_port_name_get (net/devlink/port.c:1596 (discriminator 3))
? devlink_compat_phys_port_name_get (net/devlink/port.c:1596 (discriminator 3))
rtnl_fill_ifinfo.constprop.0 (net/core/rtnetlink.c:1432
net/core/rtnetlink.c:2112)
? _raw_spin_unlock_irqrestore (./include/linux/spinlock_api_smp.h:151
kernel/locking/spinlock.c:194)
? lockdep_hardirqs_on (kernel/locking/lockdep.c:4476 (discriminator 3))
? __pfx_rtnl_fill_ifinfo.constprop.0 (net/core/rtnetlink.c:2017)
? rcu_is_watching (./include/linux/context_tracking.h:128 kernel/rcu/tree.c:736)
? __alloc_skb (net/core/skbuff.c:668)
? rcu_is_watching (./include/linux/context_tracking.h:128 kernel/rcu/tree.c:736)
? kmalloc_reserve (net/core/skbuff.c:602)
? __build_skb_around (./arch/x86/include/asm/atomic.h:28
./include/linux/atomic/atomic-arch-fallback.h:503
./include/linux/atomic/atomic-instrumented.h:68 net/core/skbuff.c:380
net/core/skbuff.c:438)
? __alloc_skb (net/core/skbuff.c:684)
? __pfx___alloc_skb (net/core/skbuff.c:641)
? lockdep_rcu_suspicious (./include/linux/context_tracking.h:159
kernel/locking/lockdep.c:6864)
rtmsg_ifinfo_build_skb (net/core/rtnetlink.c:4409)
rtmsg_ifinfo (net/core/rtnetlink.c:4442 net/core/rtnetlink.c:4432
net/core/rtnetlink.c:4451)
dev_close_many (net/core/dev.c:2285 net/core/dev.c:2299 net/core/dev.c:1788)
? __pfx_dev_close_many (net/core/dev.c:1776)
netif_close (./include/linux/list.h:124 ./include/linux/list.h:215
./include/linux/list.h:229 net/core/dev.c:1802 net/core/dev.c:1795)
? __pfx_netif_close (net/core/dev.c:1796)
? mark_held_locks (kernel/locking/lockdep.c:4326)
bnxt_shutdown (drivers/net/ethernet/broadcom/bnxt/bnxt.c:16707) bnxt_en
pci_device_shutdown (drivers/pci/pci-driver.c:511)
device_shutdown (drivers/base/core.c:4820)
kernel_restart (kernel/reboot.c:271 kernel/reboot.c:285)
__do_sys_reboot (kernel/reboot.c:763)
? __pfx___do_sys_reboot (kernel/reboot.c:725)
? rseq_get_rseq_cs (kernel/rseq.c:310)
? rseq_syscall (kernel/rseq.c:465)
? __pfx_rseq_syscall (kernel/rseq.c:458)
? do_writev (fs/read_write.c:1101)
? __pfx_do_writev (fs/read_write.c:1091)
do_syscall_64 (arch/x86/entry/syscall_64.c:63 arch/x86/entry/syscall_64.c:94)
entry_SYSCALL_64_after_hwframe (arch/x86/entry/entry_64.S:130)
RIP: 0033:0x7f7f28830a07
Code: c7 c0 ff ff ff ff eb be 66 2e 0f 1f 84 00 00 00 00 00 90 f3 0f
1e fa 89 fa be 69 19 12 28 bf ad de e1 fe b8 a9 00 00 00 0f 05 <48> 3d
008
All code
========
0: c7 c0 ff ff ff ff mov $0xffffffff,%eax
6: eb be jmp 0xffffffffffffffc6
8: 66 2e 0f 1f 84 00 00 cs nopw 0x0(%rax,%rax,1)
f: 00 00 00
12: 90 nop
13: f3 0f 1e fa endbr64
17: 89 fa mov %edi,%edx
19: be 69 19 12 28 mov $0x28121969,%esi
1e: bf ad de e1 fe mov $0xfee1dead,%edi
23: b8 a9 00 00 00 mov $0xa9,%eax
28: 0f 05 syscall
2a:* 48 rex.W <-- trapping instruction
2b: 3d .byte 0x3d
2c: 08 .byte 0x8
Code starting with the faulting instruction
===========================================
0: 48 rex.W
1: 3d .byte 0x3d
2: 08 .byte 0x8
RSP: 002b:00007ffc65d6b1a8 EFLAGS: 00000246 ORIG_RAX: 00000000000000a9
RAX: ffffffffffffffda RBX: 0000000000000003 RCX: 00007f7f28830a07
RDX: 0000000001234567 RSI: 0000000028121969 RDI: 00000000fee1dead
RBP: 00007ffc65d6b3e0 R08: 0000000000000069 R09: 0000000000000000
R10: 0000000000000000 R11: 0000000000000246 R12: 0000000000000000
R13: 0000000000000000 R14: 0000000000000000 R15: 0000000001234567
</TASK>
irq event stamp: 12755161
hardirqs last enabled at (12755173): __up_console_sem
(kernel/printk/printk.c:344 (discriminator 1))
hardirqs last disabled at (12755206): __up_console_sem
(kernel/printk/printk.c:342 (discriminator 1))
softirqs last enabled at (12755236): __irq_exit_rcu
(kernel/softirq.c:596 kernel/softirq.c:435 kernel/softirq.c:662)
softirqs last disabled at (12755249): __irq_exit_rcu
(kernel/softirq.c:596 kernel/softirq.c:435 kernel/softirq.c:662)
---[ end trace 0000000000000000 ]---
=============================
WARNING: suspicious RCU usage
6.14.0+ #2 Tainted: G W
-----------------------------
net/mctp/device.c:48 suspicious rcu_dereference_protected() usage!
other info that might help us debug this:
rcu_scheduler_active = 2, debug_locks = 1
5 locks held by shutdown/1:
#0: ffffffffa4d58750 (system_transition_mutex){+.+.}-{4:4}, at:
__do_sys_reboot (kernel/reboot.c:760)
#1: ffff888114d0c1b8 (&dev->mutex){....}-{4:4}, at: device_shutdown
(./include/linux/device.h:922 drivers/base/core.c:4802)
#2: ffff8881152211b8 (&dev->mutex){....}-{4:4}, at: device_shutdown
(./include/linux/pm_runtime.h:121 drivers/base/core.c:4805)
#3: ffff888178e24d90 (&dev->lock){+.+.}-{4:4}, at: bnxt_shutdown
(drivers/net/ethernet/broadcom/bnxt/bnxt.c:16703) bnxt_en
#4: ffffffffabda0e60 (rcu_read_lock){....}-{1:3}, at:
rtnl_fill_ifinfo.constprop.0 (./include/linux/rcupdate.h:331
./include/linux/rcupdate.h:841 net/core/rtnetlink.c:2146)
stack backtrace:
CPU: 0 UID: 0 PID: 1 Comm: shutdown Tainted: G W
6.14.0+ #2 PREEMPT(undef) 271a3d276f79e3bb26d6065917556e94aae0d88d
Tainted: [W]=WARN
Hardware name: ASUS System Product Name/PRIME Z690-P D4, BIOS 0603 11/01/2021
Call Trace:
<TASK>
dump_stack_lvl (lib/dump_stack.c:123)
lockdep_rcu_suspicious (kernel/locking/lockdep.c:6863)
mctp_dev_get_rtnl (net/mctp/device.c:48 (discriminator 7))
mctp_fill_link_af (net/mctp/device.c:355)
? __pfx_mctp_fill_link_af (net/mctp/device.c:351)
? nla_put (lib/nlattr.c:1100)
rtnl_fill_ifinfo.constprop.0 (net/core/rtnetlink.c:1886
net/core/rtnetlink.c:2152)
? lockdep_hardirqs_on (kernel/locking/lockdep.c:4476 (discriminator 3))
? __pfx_rtnl_fill_ifinfo.constprop.0 (net/core/rtnetlink.c:2017)
? rcu_is_watching (./include/linux/context_tracking.h:128 kernel/rcu/tree.c:736)
? __alloc_skb (net/core/skbuff.c:668)
? rcu_is_watching (./include/linux/context_tracking.h:128 kernel/rcu/tree.c:736)
? __build_skb_around (./arch/x86/include/asm/atomic.h:28
./include/linux/atomic/atomic-arch-fallback.h:503
./include/linux/atomic/atomic-instrumented.h:68 net/core/skbuff.c:380
net/core/skbuff.c:438)
? __alloc_skb (net/core/skbuff.c:684)
? __pfx___alloc_skb (net/core/skbuff.c:641)
? lockdep_rcu_suspicious (./include/linux/context_tracking.h:159
kernel/locking/lockdep.c:6864)
rtmsg_ifinfo_build_skb (net/core/rtnetlink.c:4409)
rtmsg_ifinfo (net/core/rtnetlink.c:4442 net/core/rtnetlink.c:4432
net/core/rtnetlink.c:4451)
dev_close_many (net/core/dev.c:2285 net/core/dev.c:2299 net/core/dev.c:1788)
? __pfx_dev_close_many (net/core/dev.c:1776)
netif_close (./include/linux/list.h:124 ./include/linux/list.h:215
./include/linux/list.h:229 net/core/dev.c:1802 net/core/dev.c:1795)
? __pfx_netif_close (net/core/dev.c:1796)
? mark_held_locks (kernel/locking/lockdep.c:4326)
bnxt_shutdown (drivers/net/ethernet/broadcom/bnxt/bnxt.c:16707) bnxt_en
pci_device_shutdown (drivers/pci/pci-driver.c:511)
device_shutdown (drivers/base/core.c:4820)
kernel_restart (kernel/reboot.c:271 kernel/reboot.c:285)
__do_sys_reboot (kernel/reboot.c:763)
? __pfx___do_sys_reboot (kernel/reboot.c:725)
? rseq_get_rseq_cs (kernel/rseq.c:310)
? rseq_syscall (kernel/rseq.c:465)
? __pfx_rseq_syscall (kernel/rseq.c:458)
? do_writev (fs/read_write.c:1101)
? __pfx_do_writev (fs/read_write.c:1091)
do_syscall_64 (arch/x86/entry/syscall_64.c:63 arch/x86/entry/syscall_64.c:94)
entry_SYSCALL_64_after_hwframe (arch/x86/entry/entry_64.S:130)
RIP: 0033:0x7f7f28830a07
Code: c7 c0 ff ff ff ff eb be 66 2e 0f 1f 84 00 00 00 00 00 90 f3 0f
1e fa 89 fa be 69 19 12 28 bf ad de e1 fe b8 a9 00 00 00 0f 05 <48> 3d
008
All code
========
0: c7 c0 ff ff ff ff mov $0xffffffff,%eax
6: eb be jmp 0xffffffffffffffc6
8: 66 2e 0f 1f 84 00 00 cs nopw 0x0(%rax,%rax,1)
f: 00 00 00
12: 90 nop
13: f3 0f 1e fa endbr64
17: 89 fa mov %edi,%edx
19: be 69 19 12 28 mov $0x28121969,%esi
1e: bf ad de e1 fe mov $0xfee1dead,%edi
23: b8 a9 00 00 00 mov $0xa9,%eax
28: 0f 05 syscall
2a:* 48 rex.W <-- trapping instruction
2b: 3d .byte 0x3d
2c: 08 .byte 0x8
Code starting with the faulting instruction
===========================================
0: 48 rex.W
1: 3d .byte 0x3d
2: 08 .byte 0x8
RSP: 002b:00007ffc65d6b1a8 EFLAGS: 00000246 ORIG_RAX: 00000000000000a9
RAX: ffffffffffffffda RBX: 0000000000000003 RCX: 00007f7f28830a07
RDX: 0000000001234567 RSI: 0000000028121969 RDI: 00000000fee1dead
RBP: 00007ffc65d6b3e0 R08: 0000000000000069 R09: 0000000000000000
R10: 0000000000000000 R11: 0000000000000246 R12: 0000000000000000
R13: 0000000000000000 R14: 0000000000000000 R15: 0000000001234567
</TASK>
------------[ cut here ]------------
RTNL: assertion failed at net/ipv4/igmp.c (1826)
WARNING: CPU: 0 PID: 1 at net/ipv4/igmp.c:1826 ip_mc_down
(net/ipv4/igmp.c:1826 (discriminator 3))
Modules linked in: xt_nat xt_tcpudp veth xt_conntrack nft_chain_nat
xt_MASQUERADE nf_conntrack_netlink xfrm_user xt_addrtype nft_compat
nf_tabs
CPU: 0 UID: 0 PID: 1 Comm: shutdown Tainted: G W
6.14.0+ #2 PREEMPT(undef) 271a3d276f79e3bb26d6065917556e94aae0d88d
Tainted: [W]=WARN
Hardware name: ASUS System Product Name/PRIME Z690-P D4, BIOS 0603 11/01/2021
RIP: 0010:ip_mc_down (net/ipv4/igmp.c:1826 (discriminator 3))
Code: 5b 39 09 09 00 0f 85 e7 fd ff ff ba 22 07 00 00 48 c7 c6 00 8e
02 a4 48 c7 c7 80 8f 02 a4 c6 05 3b 39 09 09 01 e8 4f 8f f6 fd <0f> 0b
e9e
All code
========
0: 5b pop %rbx
1: 39 09 cmp %ecx,(%rcx)
3: 09 00 or %eax,(%rax)
5: 0f 85 e7 fd ff ff jne 0xfffffffffffffdf2
b: ba 22 07 00 00 mov $0x722,%edx
10: 48 c7 c6 00 8e 02 a4 mov $0xffffffffa4028e00,%rsi
17: 48 c7 c7 80 8f 02 a4 mov $0xffffffffa4028f80,%rdi
1e: c6 05 3b 39 09 09 01 movb $0x1,0x909393b(%rip) # 0x9093960
25: e8 4f 8f f6 fd call 0xfffffffffdf68f79
2a:* 0f 0b ud2 <-- trapping instruction
2c: 9e sahf
Code starting with the faulting instruction
===========================================
0: 0f 0b ud2
2: 9e sahf
RSP: 0018:ffff888104e2fa10 EFLAGS: 00010286
RAX: 0000000000000000 RBX: 1ffff110209c5f4e RCX: 0000000000000000
RDX: 0000000000000002 RSI: 0000000000000004 RDI: 0000000000000001
RBP: ffff8881a3141000 R08: 0000000000000000 R09: fffffbfff49a4af4
R10: 0000000000000003 R11: 0000000000000001 R12: ffff888178e24000
R13: ffff8881a3141000 R14: 0000000000000002 R15: ffff888178e24420
FS: 00007f7f27cb4440(0000) GS:ffff88886dc22000(0000) knlGS:0000000000000000
CS: 0010 DS: 0000 ES: 0000 CR0: 0000000080050033
CR2: 00007ffc65d6b0cc CR3: 00000001d73de000 CR4: 00000000007506f0
PKRU: 55555554
Call Trace:
<TASK>
? __warn (kernel/panic.c:748)
? __pfx_vprintk_emit.part.0 (kernel/printk/printk.c:2378)
? ip_mc_down (net/ipv4/igmp.c:1826 (discriminator 3))
? report_bug (lib/bug.c:201 lib/bug.c:219)
? ip_mc_down (net/ipv4/igmp.c:1826 (discriminator 3))
? handle_bug (arch/x86/kernel/traps.c:337)
? exc_invalid_op (arch/x86/kernel/traps.c:391 (discriminator 1))
? asm_exc_invalid_op (./arch/x86/include/asm/idtentry.h:578)
? ip_mc_down (net/ipv4/igmp.c:1826 (discriminator 3))
inetdev_event (net/ipv4/devinet.c:1669)
? _raw_spin_unlock_irqrestore (./arch/x86/include/asm/preempt.h:104
./include/linux/spinlock_api_smp.h:152 kernel/locking/spinlock.c:194)
? __wake_up (kernel/sched/wait.c:110 kernel/sched/wait.c:127)
? __pfx_inetdev_event (net/ipv4/devinet.c:1583)
? nexthop_flush_dev (./include/net/net_namespace.h:409
./include/linux/netdevice.h:2709 net/ipv4/nexthop.c:2653)
? nh_netdev_event (net/ipv4/nexthop.c:3878)
? notifier_call_chain (kernel/notifier.c:85)
notifier_call_chain (kernel/notifier.c:85)
dev_close_many (net/core/dev.c:1789)
? __pfx_dev_close_many (net/core/dev.c:1776)
netif_close (./include/linux/list.h:124 ./include/linux/list.h:215
./include/linux/list.h:229 net/core/dev.c:1802 net/core/dev.c:1795)
? __pfx_netif_close (net/core/dev.c:1796)
? mark_held_locks (kernel/locking/lockdep.c:4326)
bnxt_shutdown (drivers/net/ethernet/broadcom/bnxt/bnxt.c:16707) bnxt_en
pci_device_shutdown (drivers/pci/pci-driver.c:511)
device_shutdown (drivers/base/core.c:4820)
kernel_restart (kernel/reboot.c:271 kernel/reboot.c:285)
__do_sys_reboot (kernel/reboot.c:763)
? __pfx___do_sys_reboot (kernel/reboot.c:725)
? rseq_get_rseq_cs (kernel/rseq.c:310)
? rseq_syscall (kernel/rseq.c:465)
? __pfx_rseq_syscall (kernel/rseq.c:458)
? do_writev (fs/read_write.c:1101)
? __pfx_do_writev (fs/read_write.c:1091)
do_syscall_64 (arch/x86/entry/syscall_64.c:63 arch/x86/entry/syscall_64.c:94)
entry_SYSCALL_64_after_hwframe (arch/x86/entry/entry_64.S:130)
RIP: 0033:0x7f7f28830a07
Code: c7 c0 ff ff ff ff eb be 66 2e 0f 1f 84 00 00 00 00 00 90 f3 0f
1e fa 89 fa be 69 19 12 28 bf ad de e1 fe b8 a9 00 00 00 0f 05 <48> 3d
008
All code
========
0: c7 c0 ff ff ff ff mov $0xffffffff,%eax
6: eb be jmp 0xffffffffffffffc6
8: 66 2e 0f 1f 84 00 00 cs nopw 0x0(%rax,%rax,1)
f: 00 00 00
12: 90 nop
13: f3 0f 1e fa endbr64
17: 89 fa mov %edi,%edx
19: be 69 19 12 28 mov $0x28121969,%esi
1e: bf ad de e1 fe mov $0xfee1dead,%edi
23: b8 a9 00 00 00 mov $0xa9,%eax
28: 0f 05 syscall
2a:* 48 rex.W <-- trapping instruction
2b: 3d .byte 0x3d
2c: 08 .byte 0x8
Code starting with the faulting instruction
===========================================
0: 48 rex.W
1: 3d .byte 0x3d
2: 08 .byte 0x8
RSP: 002b:00007ffc65d6b1a8 EFLAGS: 00000246 ORIG_RAX: 00000000000000a9
RAX: ffffffffffffffda RBX: 0000000000000003 RCX: 00007f7f28830a07
RDX: 0000000001234567 RSI: 0000000028121969 RDI: 00000000fee1dead
RBP: 00007ffc65d6b3e0 R08: 0000000000000069 R09: 0000000000000000
R10: 0000000000000000 R11: 0000000000000246 R12: 0000000000000000
R13: 0000000000000000 R14: 0000000000000000 R15: 0000000001234567
</TASK>
irq event stamp: 12757803
hardirqs last enabled at (12757815): __up_console_sem
(kernel/printk/printk.c:344 (discriminator 1))
hardirqs last disabled at (12757826): __up_console_sem
(kernel/printk/printk.c:342 (discriminator 1))
softirqs last enabled at (12757708): __irq_exit_rcu
(kernel/softirq.c:596 kernel/softirq.c:435 kernel/softirq.c:662)
softirqs last disabled at (12757703): __irq_exit_rcu
(kernel/softirq.c:596 kernel/softirq.c:435 kernel/softirq.c:662)
---[ end trace 0000000000000000 ]---
=============================
WARNING: suspicious RCU usage
6.14.0+ #2 Tainted: G W
-----------------------------
net/ipv4/igmp.c:1828 suspicious rcu_dereference_protected() usage!
other info that might help us debug this:
rcu_scheduler_active = 2, debug_locks = 1
4 locks held by shutdown/1:
#0: ffffffffa4d58750 (system_transition_mutex){+.+.}-{4:4}, at:
__do_sys_reboot (kernel/reboot.c:760)
#1: ffff888114d0c1b8 (&dev->mutex){....}-{4:4}, at: device_shutdown
(./include/linux/device.h:922 drivers/base/core.c:4802)
#2: ffff8881152211b8 (&dev->mutex){....}-{4:4}, at: device_shutdown
(./include/linux/pm_runtime.h:121 drivers/base/core.c:4805)
#3: ffff888178e24d90 (&dev->lock){+.+.}-{4:4}, at: bnxt_shutdown
(drivers/net/ethernet/broadcom/bnxt/bnxt.c:16703) bnxt_en
stack backtrace:
CPU: 0 UID: 0 PID: 1 Comm: shutdown Tainted: G W
6.14.0+ #2 PREEMPT(undef) 271a3d276f79e3bb26d6065917556e94aae0d88d
Tainted: [W]=WARN
Hardware name: ASUS System Product Name/PRIME Z690-P D4, BIOS 0603 11/01/2021
Call Trace:
<TASK>
dump_stack_lvl (lib/dump_stack.c:123)
lockdep_rcu_suspicious (kernel/locking/lockdep.c:6863)
ip_mc_down (net/ipv4/igmp.c:1828 (discriminator 7))
inetdev_event (net/ipv4/devinet.c:1669)
? _raw_spin_unlock_irqrestore (./arch/x86/include/asm/preempt.h:104
./include/linux/spinlock_api_smp.h:152 kernel/locking/spinlock.c:194)
? __wake_up (kernel/sched/wait.c:110 kernel/sched/wait.c:127)
? __pfx_inetdev_event (net/ipv4/devinet.c:1583)
? nexthop_flush_dev (./include/net/net_namespace.h:409
./include/linux/netdevice.h:2709 net/ipv4/nexthop.c:2653)
? nh_netdev_event (net/ipv4/nexthop.c:3878)
? notifier_call_chain (kernel/notifier.c:85)
notifier_call_chain (kernel/notifier.c:85)
dev_close_many (net/core/dev.c:1789)
? __pfx_dev_close_many (net/core/dev.c:1776)
netif_close (./include/linux/list.h:124 ./include/linux/list.h:215
./include/linux/list.h:229 net/core/dev.c:1802 net/core/dev.c:1795)
? __pfx_netif_close (net/core/dev.c:1796)
? mark_held_locks (kernel/locking/lockdep.c:4326)
bnxt_shutdown (drivers/net/ethernet/broadcom/bnxt/bnxt.c:16707) bnxt_en
pci_device_shutdown (drivers/pci/pci-driver.c:511)
device_shutdown (drivers/base/core.c:4820)
kernel_restart (kernel/reboot.c:271 kernel/reboot.c:285)
__do_sys_reboot (kernel/reboot.c:763)
? __pfx___do_sys_reboot (kernel/reboot.c:725)
? rseq_get_rseq_cs (kernel/rseq.c:310)
? rseq_syscall (kernel/rseq.c:465)
? __pfx_rseq_syscall (kernel/rseq.c:458)
? do_writev (fs/read_write.c:1101)
? __pfx_do_writev (fs/read_write.c:1091)
do_syscall_64 (arch/x86/entry/syscall_64.c:63 arch/x86/entry/syscall_64.c:94)
entry_SYSCALL_64_after_hwframe (arch/x86/entry/entry_64.S:130)
RIP: 0033:0x7f7f28830a07
Code: c7 c0 ff ff ff ff eb be 66 2e 0f 1f 84 00 00 00 00 00 90 f3 0f
1e fa 89 fa be 69 19 12 28 bf ad de e1 fe b8 a9 00 00 00 0f 05 <48> 3d
008
All code
========
0: c7 c0 ff ff ff ff mov $0xffffffff,%eax
6: eb be jmp 0xffffffffffffffc6
8: 66 2e 0f 1f 84 00 00 cs nopw 0x0(%rax,%rax,1)
f: 00 00 00
12: 90 nop
13: f3 0f 1e fa endbr64
17: 89 fa mov %edi,%edx
19: be 69 19 12 28 mov $0x28121969,%esi
1e: bf ad de e1 fe mov $0xfee1dead,%edi
23: b8 a9 00 00 00 mov $0xa9,%eax
28: 0f 05 syscall
2a:* 48 rex.W <-- trapping instruction
2b: 3d .byte 0x3d
2c: 08 .byte 0x8
Code starting with the faulting instruction
===========================================
0: 48 rex.W
1: 3d .byte 0x3d
2: 08 .byte 0x8
RSP: 002b:00007ffc65d6b1a8 EFLAGS: 00000246 ORIG_RAX: 00000000000000a9
RAX: ffffffffffffffda RBX: 0000000000000003 RCX: 00007f7f28830a07
RDX: 0000000001234567 RSI: 0000000028121969 RDI: 00000000fee1dead
RBP: 00007ffc65d6b3e0 R08: 0000000000000069 R09: 0000000000000000
R10: 0000000000000000 R11: 0000000000000246 R12: 0000000000000000
R13: 0000000000000000 R14: 0000000000000000 R15: 0000000001234567
</TASK>
=============================
WARNING: suspicious RCU usage
6.14.0+ #2 Tainted: G W
-----------------------------
net/ipv4/igmp.c:1828 suspicious rcu_dereference_protected() usage!
other info that might help us debug this:
rcu_scheduler_active = 2, debug_locks = 1
4 locks held by shutdown/1:
#0: ffffffffa4d58750 (system_transition_mutex){+.+.}-{4:4}, at:
__do_sys_reboot (kernel/reboot.c:760)
#1: ffff888114d0c1b8 (&dev->mutex){....}-{4:4}, at: device_shutdown
(./include/linux/device.h:922 drivers/base/core.c:4802)
#2: ffff8881152211b8 (&dev->mutex){....}-{4:4}, at: device_shutdown
(./include/linux/pm_runtime.h:121 drivers/base/core.c:4805)
#3: ffff888178e24d90 (&dev->lock){+.+.}-{4:4}, at: bnxt_shutdown
(drivers/net/ethernet/broadcom/bnxt/bnxt.c:16703) bnxt_en
stack backtrace:
CPU: 0 UID: 0 PID: 1 Comm: shutdown Tainted: G W
6.14.0+ #2 PREEMPT(undef) 271a3d276f79e3bb26d6065917556e94aae0d88d
Tainted: [W]=WARN
Hardware name: ASUS System Product Name/PRIME Z690-P D4, BIOS 0603 11/01/2021
Call Trace:
<TASK>
dump_stack_lvl (lib/dump_stack.c:123)
lockdep_rcu_suspicious (kernel/locking/lockdep.c:6863)
ip_mc_down (net/ipv4/igmp.c:1828 (discriminator 17))
inetdev_event (net/ipv4/devinet.c:1669)
? _raw_spin_unlock_irqrestore (./arch/x86/include/asm/preempt.h:104
./include/linux/spinlock_api_smp.h:152 kernel/locking/spinlock.c:194)
? __wake_up (kernel/sched/wait.c:110 kernel/sched/wait.c:127)
? __pfx_inetdev_event (net/ipv4/devinet.c:1583)
? nexthop_flush_dev (./include/net/net_namespace.h:409
./include/linux/netdevice.h:2709 net/ipv4/nexthop.c:2653)
? nh_netdev_event (net/ipv4/nexthop.c:3878)
? notifier_call_chain (kernel/notifier.c:85)
notifier_call_chain (kernel/notifier.c:85)
dev_close_many (net/core/dev.c:1789)
? __pfx_dev_close_many (net/core/dev.c:1776)
netif_close (./include/linux/list.h:124 ./include/linux/list.h:215
./include/linux/list.h:229 net/core/dev.c:1802 net/core/dev.c:1795)
? __pfx_netif_close (net/core/dev.c:1796)
? mark_held_locks (kernel/locking/lockdep.c:4326)
bnxt_shutdown (drivers/net/ethernet/broadcom/bnxt/bnxt.c:16707) bnxt_en
pci_device_shutdown (drivers/pci/pci-driver.c:511)
device_shutdown (drivers/base/core.c:4820)
kernel_restart (kernel/reboot.c:271 kernel/reboot.c:285)
__do_sys_reboot (kernel/reboot.c:763)
? __pfx___do_sys_reboot (kernel/reboot.c:725)
? rseq_get_rseq_cs (kernel/rseq.c:310)
? rseq_syscall (kernel/rseq.c:465)
? __pfx_rseq_syscall (kernel/rseq.c:458)
? do_writev (fs/read_write.c:1101)
? __pfx_do_writev (fs/read_write.c:1091)
do_syscall_64 (arch/x86/entry/syscall_64.c:63 arch/x86/entry/syscall_64.c:94)
entry_SYSCALL_64_after_hwframe (arch/x86/entry/entry_64.S:130)
RIP: 0033:0x7f7f28830a07
Code: c7 c0 ff ff ff ff eb be 66 2e 0f 1f 84 00 00 00 00 00 90 f3 0f
1e fa 89 fa be 69 19 12 28 bf ad de e1 fe b8 a9 00 00 00 0f 05 <48> 3d
008
All code
========
0: c7 c0 ff ff ff ff mov $0xffffffff,%eax
6: eb be jmp 0xffffffffffffffc6
8: 66 2e 0f 1f 84 00 00 cs nopw 0x0(%rax,%rax,1)
f: 00 00 00
12: 90 nop
13: f3 0f 1e fa endbr64
17: 89 fa mov %edi,%edx
19: be 69 19 12 28 mov $0x28121969,%esi
1e: bf ad de e1 fe mov $0xfee1dead,%edi
23: b8 a9 00 00 00 mov $0xa9,%eax
28: 0f 05 syscall
2a:* 48 rex.W <-- trapping instruction
2b: 3d .byte 0x3d
2c: 08 .byte 0x8
Code starting with the faulting instruction
===========================================
0: 48 rex.W
1: 3d .byte 0x3d
2: 08 .byte 0x8
RSP: 002b:00007ffc65d6b1a8 EFLAGS: 00000246 ORIG_RAX: 00000000000000a9
RAX: ffffffffffffffda RBX: 0000000000000003 RCX: 00007f7f28830a07
RDX: 0000000001234567 RSI: 0000000028121969 RDI: 00000000fee1dead
RBP: 00007ffc65d6b3e0 R08: 0000000000000069 R09: 0000000000000000
R10: 0000000000000000 R11: 0000000000000246 R12: 0000000000000000
R13: 0000000000000000 R14: 0000000000000000 R15: 0000000001234567
</TASK>
------------[ cut here ]------------
RTNL: assertion failed at net/ipv4/igmp.c (1767)
WARNING: CPU: 0 PID: 1 at net/ipv4/igmp.c:1767 __ip_mc_dec_group
(net/ipv4/igmp.c:1767 (discriminator 3))
Modules linked in: xt_nat xt_tcpudp veth xt_conntrack nft_chain_nat
xt_MASQUERADE nf_conntrack_netlink xfrm_user xt_addrtype nft_compat
nf_tabs
CPU: 0 UID: 0 PID: 1 Comm: shutdown Tainted: G W
6.14.0+ #2 PREEMPT(undef) 271a3d276f79e3bb26d6065917556e94aae0d88d
Tainted: [W]=WARN
Hardware name: ASUS System Product Name/PRIME Z690-P D4, BIOS 0603 11/01/2021
RIP: 0010:__ip_mc_dec_group (net/ipv4/igmp.c:1767 (discriminator 3))
Code: b6 44 09 09 00 0f 85 2f fe ff ff ba e7 06 00 00 48 c7 c6 00 8e
02 a4 48 c7 c7 80 8f 02 a4 c6 05 96 44 09 09 01 e8 a7 9a f6 fd <0f> 0b
e98
All code
========
0: b6 44 mov $0x44,%dh
2: 09 09 or %ecx,(%rcx)
4: 00 0f add %cl,(%rdi)
6: 85 2f test %ebp,(%rdi)
8: fe (bad)
9: ff (bad)
a: ff (bad)
b: ba e7 06 00 00 mov $0x6e7,%edx
10: 48 c7 c6 00 8e 02 a4 mov $0xffffffffa4028e00,%rsi
17: 48 c7 c7 80 8f 02 a4 mov $0xffffffffa4028f80,%rdi
1e: c6 05 96 44 09 09 01 movb $0x1,0x9094496(%rip) # 0x90944bb
25: e8 a7 9a f6 fd call 0xfffffffffdf69ad1
2a:* 0f 0b ud2 <-- trapping instruction
2c: 98 cwtl
Code starting with the faulting instruction
===========================================
0: 0f 0b ud2
2: 98 cwtl
RSP: 0018:ffff888104e2f9f0 EFLAGS: 00010286
RAX: 0000000000000000 RBX: 1ffff110209c5f4e RCX: 0000000000000000
RDX: 0000000000000002 RSI: 0000000000000004 RDI: 0000000000000001
RBP: ffff888104e2fb00 R08: 0000000000000000 R09: fffffbfff49a4af4
R10: 0000000000000003 R11: 0000000000000001 R12: ffff888178e24000
R13: 00000000010000e0 R14: ffff8881a3141000 R15: 0000000000000cc0
FS: 00007f7f27cb4440(0000) GS:ffff88886dc22000(0000) knlGS:0000000000000000
CS: 0010 DS: 0000 ES: 0000 CR0: 0000000080050033
CR2: 00007ffc65d6b0cc CR3: 00000001d73de000 CR4: 00000000007506f0
PKRU: 55555554
Call Trace:
<TASK>
? __warn (kernel/panic.c:748)
? __pfx_vprintk_emit.part.0 (kernel/printk/printk.c:2378)
? __ip_mc_dec_group (net/ipv4/igmp.c:1767 (discriminator 3))
? report_bug (lib/bug.c:201 lib/bug.c:219)
? __ip_mc_dec_group (net/ipv4/igmp.c:1767 (discriminator 3))
? handle_bug (arch/x86/kernel/traps.c:337)
? exc_invalid_op (arch/x86/kernel/traps.c:391 (discriminator 1))
? asm_exc_invalid_op (./arch/x86/include/asm/idtentry.h:578)
? __ip_mc_dec_group (net/ipv4/igmp.c:1767 (discriminator 3))
inetdev_event (net/ipv4/devinet.c:1669)
? _raw_spin_unlock_irqrestore (./arch/x86/include/asm/preempt.h:104
./include/linux/spinlock_api_smp.h:152 kernel/locking/spinlock.c:194)
? __wake_up (kernel/sched/wait.c:110 kernel/sched/wait.c:127)
? __pfx_inetdev_event (net/ipv4/devinet.c:1583)
? nexthop_flush_dev (./include/net/net_namespace.h:409
./include/linux/netdevice.h:2709 net/ipv4/nexthop.c:2653)
? nh_netdev_event (net/ipv4/nexthop.c:3878)
? notifier_call_chain (kernel/notifier.c:85)
notifier_call_chain (kernel/notifier.c:85)
dev_close_many (net/core/dev.c:1789)
? __pfx_dev_close_many (net/core/dev.c:1776)
netif_close (./include/linux/list.h:124 ./include/linux/list.h:215
./include/linux/list.h:229 net/core/dev.c:1802 net/core/dev.c:1795)
? __pfx_netif_close (net/core/dev.c:1796)
? mark_held_locks (kernel/locking/lockdep.c:4326)
bnxt_shutdown (drivers/net/ethernet/broadcom/bnxt/bnxt.c:16707) bnxt_en
pci_device_shutdown (drivers/pci/pci-driver.c:511)
device_shutdown (drivers/base/core.c:4820)
kernel_restart (kernel/reboot.c:271 kernel/reboot.c:285)
__do_sys_reboot (kernel/reboot.c:763)
? __pfx___do_sys_reboot (kernel/reboot.c:725)
? rseq_get_rseq_cs (kernel/rseq.c:310)
? rseq_syscall (kernel/rseq.c:465)
? __pfx_rseq_syscall (kernel/rseq.c:458)
? do_writev (fs/read_write.c:1101)
? __pfx_do_writev (fs/read_write.c:1091)
do_syscall_64 (arch/x86/entry/syscall_64.c:63 arch/x86/entry/syscall_64.c:94)
entry_SYSCALL_64_after_hwframe (arch/x86/entry/entry_64.S:130)
RIP: 0033:0x7f7f28830a07
Code: c7 c0 ff ff ff ff eb be 66 2e 0f 1f 84 00 00 00 00 00 90 f3 0f
1e fa 89 fa be 69 19 12 28 bf ad de e1 fe b8 a9 00 00 00 0f 05 <48> 3d
008
All code
========
0: c7 c0 ff ff ff ff mov $0xffffffff,%eax
6: eb be jmp 0xffffffffffffffc6
8: 66 2e 0f 1f 84 00 00 cs nopw 0x0(%rax,%rax,1)
f: 00 00 00
12: 90 nop
13: f3 0f 1e fa endbr64
17: 89 fa mov %edi,%edx
19: be 69 19 12 28 mov $0x28121969,%esi
1e: bf ad de e1 fe mov $0xfee1dead,%edi
23: b8 a9 00 00 00 mov $0xa9,%eax
28: 0f 05 syscall
2a:* 48 rex.W <-- trapping instruction
2b: 3d .byte 0x3d
2c: 08 .byte 0x8
Code starting with the faulting instruction
===========================================
0: 48 rex.W
1: 3d .byte 0x3d
2: 08 .byte 0x8
RSP: 002b:00007ffc65d6b1a8 EFLAGS: 00000246 ORIG_RAX: 00000000000000a9
RAX: ffffffffffffffda RBX: 0000000000000003 RCX: 00007f7f28830a07
RDX: 0000000001234567 RSI: 0000000028121969 RDI: 00000000fee1dead
RBP: 00007ffc65d6b3e0 R08: 0000000000000069 R09: 0000000000000000
R10: 0000000000000000 R11: 0000000000000246 R12: 0000000000000000
R13: 0000000000000000 R14: 0000000000000000 R15: 0000000001234567
</TASK>
irq event stamp: 12760245
hardirqs last enabled at (12760257): __up_console_sem
(kernel/printk/printk.c:344 (discriminator 1))
hardirqs last disabled at (12760268): __up_console_sem
(kernel/printk/printk.c:342 (discriminator 1))
softirqs last enabled at (12760150): __irq_exit_rcu
(kernel/softirq.c:596 kernel/softirq.c:435 kernel/softirq.c:662)
softirqs last disabled at (12760145): __irq_exit_rcu
(kernel/softirq.c:596 kernel/softirq.c:435 kernel/softirq.c:662)
---[ end trace 0000000000000000 ]---
=============================
WARNING: suspicious RCU usage
6.14.0+ #2 Tainted: G W
-----------------------------
net/ipv4/igmp.c:1770 suspicious rcu_dereference_protected() usage!
other info that might help us debug this:
rcu_scheduler_active = 2, debug_locks = 1
4 locks held by shutdown/1:
#0: ffffffffa4d58750 (system_transition_mutex){+.+.}-{4:4}, at:
__do_sys_reboot (kernel/reboot.c:760)
#1: ffff888114d0c1b8 (&dev->mutex){....}-{4:4}, at: device_shutdown
(./include/linux/device.h:922 drivers/base/core.c:4802)
#2: ffff8881152211b8 (&dev->mutex){....}-{4:4}, at: device_shutdown
(./include/linux/pm_runtime.h:121 drivers/base/core.c:4805)
#3: ffff888178e24d90 (&dev->lock){+.+.}-{4:4}, at: bnxt_shutdown
(drivers/net/ethernet/broadcom/bnxt/bnxt.c:16703) bnxt_en
stack backtrace:
CPU: 0 UID: 0 PID: 1 Comm: shutdown Tainted: G W
6.14.0+ #2 PREEMPT(undef) 271a3d276f79e3bb26d6065917556e94aae0d88d
Tainted: [W]=WARN
Hardware name: ASUS System Product Name/PRIME Z690-P D4, BIOS 0603 11/01/2021
Call Trace:
<TASK>
dump_stack_lvl (lib/dump_stack.c:123)
lockdep_rcu_suspicious (kernel/locking/lockdep.c:6863)
__ip_mc_dec_group (net/ipv4/igmp.c:1770 (discriminator 7))
inetdev_event (net/ipv4/devinet.c:1669)
? _raw_spin_unlock_irqrestore (./arch/x86/include/asm/preempt.h:104
./include/linux/spinlock_api_smp.h:152 kernel/locking/spinlock.c:194)
? __wake_up (kernel/sched/wait.c:110 kernel/sched/wait.c:127)
? __pfx_inetdev_event (net/ipv4/devinet.c:1583)
? nexthop_flush_dev (./include/net/net_namespace.h:409
./include/linux/netdevice.h:2709 net/ipv4/nexthop.c:2653)
? nh_netdev_event (net/ipv4/nexthop.c:3878)
? notifier_call_chain (kernel/notifier.c:85)
notifier_call_chain (kernel/notifier.c:85)
dev_close_many (net/core/dev.c:1789)
? __pfx_dev_close_many (net/core/dev.c:1776)
netif_close (./include/linux/list.h:124 ./include/linux/list.h:215
./include/linux/list.h:229 net/core/dev.c:1802 net/core/dev.c:1795)
? __pfx_netif_close (net/core/dev.c:1796)
? mark_held_locks (kernel/locking/lockdep.c:4326)
bnxt_shutdown (drivers/net/ethernet/broadcom/bnxt/bnxt.c:16707) bnxt_en
pci_device_shutdown (drivers/pci/pci-driver.c:511)
device_shutdown (drivers/base/core.c:4820)
kernel_restart (kernel/reboot.c:271 kernel/reboot.c:285)
__do_sys_reboot (kernel/reboot.c:763)
? __pfx___do_sys_reboot (kernel/reboot.c:725)
? rseq_get_rseq_cs (kernel/rseq.c:310)
? rseq_syscall (kernel/rseq.c:465)
? __pfx_rseq_syscall (kernel/rseq.c:458)
? do_writev (fs/read_write.c:1101)
? __pfx_do_writev (fs/read_write.c:1091)
do_syscall_64 (arch/x86/entry/syscall_64.c:63 arch/x86/entry/syscall_64.c:94)
entry_SYSCALL_64_after_hwframe (arch/x86/entry/entry_64.S:130)
RIP: 0033:0x7f7f28830a07
Code: c7 c0 ff ff ff ff eb be 66 2e 0f 1f 84 00 00 00 00 00 90 f3 0f
1e fa 89 fa be 69 19 12 28 bf ad de e1 fe b8 a9 00 00 00 0f 05 <48> 3d
008
All code
========
0: c7 c0 ff ff ff ff mov $0xffffffff,%eax
6: eb be jmp 0xffffffffffffffc6
8: 66 2e 0f 1f 84 00 00 cs nopw 0x0(%rax,%rax,1)
f: 00 00 00
12: 90 nop
13: f3 0f 1e fa endbr64
17: 89 fa mov %edi,%edx
19: be 69 19 12 28 mov $0x28121969,%esi
1e: bf ad de e1 fe mov $0xfee1dead,%edi
23: b8 a9 00 00 00 mov $0xa9,%eax
28: 0f 05 syscall
2a:* 48 rex.W <-- trapping instruction
2b: 3d .byte 0x3d
2c: 08 .byte 0x8
Code starting with the faulting instruction
===========================================
0: 48 rex.W
1: 3d .byte 0x3d
2: 08 .byte 0x8
RSP: 002b:00007ffc65d6b1a8 EFLAGS: 00000246 ORIG_RAX: 00000000000000a9
RAX: ffffffffffffffda RBX: 0000000000000003 RCX: 00007f7f28830a07
RDX: 0000000001234567 RSI: 0000000028121969 RDI: 00000000fee1dead
RBP: 00007ffc65d6b3e0 R08: 0000000000000069 R09: 0000000000000000
R10: 0000000000000000 R11: 0000000000000246 R12: 0000000000000000
R13: 0000000000000000 R14: 0000000000000000 R15: 0000000001234567
</TASK>
=============================
WARNING: suspicious RCU usage
6.14.0+ #2 Tainted: G W
-----------------------------
net/ipv4/igmp.c:1425 suspicious rcu_dereference_protected() usage!
other info that might help us debug this:
rcu_scheduler_active = 2, debug_locks = 1
4 locks held by shutdown/1:
#0: ffffffffa4d58750 (system_transition_mutex){+.+.}-{4:4}, at:
__do_sys_reboot (kernel/reboot.c:760)
#1: ffff888114d0c1b8 (&dev->mutex){....}-{4:4}, at: device_shutdown
(./include/linux/device.h:922 drivers/base/core.c:4802)
#2: ffff8881152211b8 (&dev->mutex){....}-{4:4}, at: device_shutdown
(./include/linux/pm_runtime.h:121 drivers/base/core.c:4805)
#3: ffff888178e24d90 (&dev->lock){+.+.}-{4:4}, at: bnxt_shutdown
(drivers/net/ethernet/broadcom/bnxt/bnxt.c:16703) bnxt_en
stack backtrace:
CPU: 0 UID: 0 PID: 1 Comm: shutdown Tainted: G W
6.14.0+ #2 PREEMPT(undef) 271a3d276f79e3bb26d6065917556e94aae0d88d
Tainted: [W]=WARN
Hardware name: ASUS System Product Name/PRIME Z690-P D4, BIOS 0603 11/01/2021
Call Trace:
<TASK>
dump_stack_lvl (lib/dump_stack.c:123)
lockdep_rcu_suspicious (kernel/locking/lockdep.c:6863)
__ip_mc_dec_group (net/ipv4/igmp.c:1425 net/ipv4/igmp.c:1774)
inetdev_event (net/ipv4/devinet.c:1669)
? _raw_spin_unlock_irqrestore (./arch/x86/include/asm/preempt.h:104
./include/linux/spinlock_api_smp.h:152 kernel/locking/spinlock.c:194)
? __wake_up (kernel/sched/wait.c:110 kernel/sched/wait.c:127)
? __pfx_inetdev_event (net/ipv4/devinet.c:1583)
? nexthop_flush_dev (./include/net/net_namespace.h:409
./include/linux/netdevice.h:2709 net/ipv4/nexthop.c:2653)
? nh_netdev_event (net/ipv4/nexthop.c:3878)
? notifier_call_chain (kernel/notifier.c:85)
notifier_call_chain (kernel/notifier.c:85)
dev_close_many (net/core/dev.c:1789)
? __pfx_dev_close_many (net/core/dev.c:1776)
netif_close (./include/linux/list.h:124 ./include/linux/list.h:215
./include/linux/list.h:229 net/core/dev.c:1802 net/core/dev.c:1795)
? __pfx_netif_close (net/core/dev.c:1796)
? mark_held_locks (kernel/locking/lockdep.c:4326)
bnxt_shutdown (drivers/net/ethernet/broadcom/bnxt/bnxt.c:16707) bnxt_en
pci_device_shutdown (drivers/pci/pci-driver.c:511)
device_shutdown (drivers/base/core.c:4820)
kernel_restart (kernel/reboot.c:271 kernel/reboot.c:285)
__do_sys_reboot (kernel/reboot.c:763)
? __pfx___do_sys_reboot (kernel/reboot.c:725)
? rseq_get_rseq_cs (kernel/rseq.c:310)
? rseq_syscall (kernel/rseq.c:465)
? __pfx_rseq_syscall (kernel/rseq.c:458)
? do_writev (fs/read_write.c:1101)
? __pfx_do_writev (fs/read_write.c:1091)
do_syscall_64 (arch/x86/entry/syscall_64.c:63 arch/x86/entry/syscall_64.c:94)
entry_SYSCALL_64_after_hwframe (arch/x86/entry/entry_64.S:130)
RIP: 0033:0x7f7f28830a07
Code: c7 c0 ff ff ff ff eb be 66 2e 0f 1f 84 00 00 00 00 00 90 f3 0f
1e fa 89 fa be 69 19 12 28 bf ad de e1 fe b8 a9 00 00 00 0f 05 <48> 3d
008
All code
========
0: c7 c0 ff ff ff ff mov $0xffffffff,%eax
6: eb be jmp 0xffffffffffffffc6
8: 66 2e 0f 1f 84 00 00 cs nopw 0x0(%rax,%rax,1)
f: 00 00 00
12: 90 nop
13: f3 0f 1e fa endbr64
17: 89 fa mov %edi,%edx
19: be 69 19 12 28 mov $0x28121969,%esi
1e: bf ad de e1 fe mov $0xfee1dead,%edi
23: b8 a9 00 00 00 mov $0xa9,%eax
28: 0f 05 syscall
2a:* 48 rex.W <-- trapping instruction
2b: 3d .byte 0x3d
2c: 08 .byte 0x8
Code starting with the faulting instruction
===========================================
0: 48 rex.W
1: 3d .byte 0x3d
2: 08 .byte 0x8
RSP: 002b:00007ffc65d6b1a8 EFLAGS: 00000246 ORIG_RAX: 00000000000000a9
RAX: ffffffffffffffda RBX: 0000000000000003 RCX: 00007f7f28830a07
RDX: 0000000001234567 RSI: 0000000028121969 RDI: 00000000fee1dead
RBP: 00007ffc65d6b3e0 R08: 0000000000000069 R09: 0000000000000000
R10: 0000000000000000 R11: 0000000000000246 R12: 0000000000000000
R13: 0000000000000000 R14: 0000000000000000 R15: 0000000001234567
</TASK>
=============================
WARNING: suspicious RCU usage
6.14.0+ #2 Tainted: G W
-----------------------------
./include/linux/inetdevice.h:270 suspicious rcu_dereference_check() usage!
other info that might help us debug this:
rcu_scheduler_active = 2, debug_locks = 1
4 locks held by shutdown/1:
#0: ffffffffa4d58750 (system_transition_mutex){+.+.}-{4:4}, at:
__do_sys_reboot (kernel/reboot.c:760)
#1: ffff888114d0c1b8 (&dev->mutex){....}-{4:4}, at: device_shutdown
(./include/linux/device.h:922 drivers/base/core.c:4802)
#2: ffff8881152211b8 (&dev->mutex){....}-{4:4}, at: device_shutdown
(./include/linux/pm_runtime.h:121 drivers/base/core.c:4805)
#3: ffff888178e24d90 (&dev->lock){+.+.}-{4:4}, at: bnxt_shutdown
(drivers/net/ethernet/broadcom/bnxt/bnxt.c:16703) bnxt_en
stack backtrace:
CPU: 0 UID: 0 PID: 1 Comm: shutdown Tainted: G W
6.14.0+ #2 PREEMPT(undef) 271a3d276f79e3bb26d6065917556e94aae0d88d
Tainted: [W]=WARN
Hardware name: ASUS System Product Name/PRIME Z690-P D4, BIOS 0603 11/01/2021
Call Trace:
<TASK>
dump_stack_lvl (lib/dump_stack.c:123)
lockdep_rcu_suspicious (kernel/locking/lockdep.c:6863)
fib_sync_down_dev (./include/linux/inetdevice.h:270
net/ipv4/fib_semantics.c:1853 net/ipv4/fib_semantics.c:1971)
? __pfx_fib_sync_down_dev (net/ipv4/fib_semantics.c:1937)
? _raw_spin_unlock_irqrestore (./arch/x86/include/asm/preempt.h:104
./include/linux/spinlock_api_smp.h:152 kernel/locking/spinlock.c:194)
? __wake_up (kernel/sched/wait.c:110 kernel/sched/wait.c:127)
fib_netdev_event (net/ipv4/fib_frontend.c:1454 net/ipv4/fib_frontend.c:1524)
notifier_call_chain (kernel/notifier.c:85)
dev_close_many (net/core/dev.c:1789)
? __pfx_dev_close_many (net/core/dev.c:1776)
netif_close (./include/linux/list.h:124 ./include/linux/list.h:215
./include/linux/list.h:229 net/core/dev.c:1802 net/core/dev.c:1795)
? __pfx_netif_close (net/core/dev.c:1796)
? mark_held_locks (kernel/locking/lockdep.c:4326)
bnxt_shutdown (drivers/net/ethernet/broadcom/bnxt/bnxt.c:16707) bnxt_en
pci_device_shutdown (drivers/pci/pci-driver.c:511)
device_shutdown (drivers/base/core.c:4820)
kernel_restart (kernel/reboot.c:271 kernel/reboot.c:285)
__do_sys_reboot (kernel/reboot.c:763)
? __pfx___do_sys_reboot (kernel/reboot.c:725)
? rseq_get_rseq_cs (kernel/rseq.c:310)
? rseq_syscall (kernel/rseq.c:465)
? __pfx_rseq_syscall (kernel/rseq.c:458)
? do_writev (fs/read_write.c:1101)
? __pfx_do_writev (fs/read_write.c:1091)
do_syscall_64 (arch/x86/entry/syscall_64.c:63 arch/x86/entry/syscall_64.c:94)
entry_SYSCALL_64_after_hwframe (arch/x86/entry/entry_64.S:130)
RIP: 0033:0x7f7f28830a07
Code: c7 c0 ff ff ff ff eb be 66 2e 0f 1f 84 00 00 00 00 00 90 f3 0f
1e fa 89 fa be 69 19 12 28 bf ad de e1 fe b8 a9 00 00 00 0f 05 <48> 3d
008
All code
========
0: c7 c0 ff ff ff ff mov $0xffffffff,%eax
6: eb be jmp 0xffffffffffffffc6
8: 66 2e 0f 1f 84 00 00 cs nopw 0x0(%rax,%rax,1)
f: 00 00 00
12: 90 nop
13: f3 0f 1e fa endbr64
17: 89 fa mov %edi,%edx
19: be 69 19 12 28 mov $0x28121969,%esi
1e: bf ad de e1 fe mov $0xfee1dead,%edi
23: b8 a9 00 00 00 mov $0xa9,%eax
28: 0f 05 syscall
2a:* 48 rex.W <-- trapping instruction
2b: 3d .byte 0x3d
2c: 08 .byte 0x8
Code starting with the faulting instruction
===========================================
0: 48 rex.W
1: 3d .byte 0x3d
2: 08 .byte 0x8
RSP: 002b:00007ffc65d6b1a8 EFLAGS: 00000246 ORIG_RAX: 00000000000000a9
RAX: ffffffffffffffda RBX: 0000000000000003 RCX: 00007f7f28830a07
RDX: 0000000001234567 RSI: 0000000028121969 RDI: 00000000fee1dead
RBP: 00007ffc65d6b3e0 R08: 0000000000000069 R09: 0000000000000000
R10: 0000000000000000 R11: 0000000000000246 R12: 0000000000000000
R13: 0000000000000000 R14: 0000000000000000 R15: 0000000001234567
</TASK>
------------[ cut here ]------------
RTNL: assertion failed at net/ipv4/fib_notifier.c (22)
WARNING: CPU: 0 PID: 1 at net/ipv4/fib_notifier.c:22
call_fib4_notifiers (net/ipv4/fib_notifier.c:22 (discriminator 3))
Modules linked in: xt_nat xt_tcpudp veth xt_conntrack nft_chain_nat
xt_MASQUERADE nf_conntrack_netlink xfrm_user xt_addrtype nft_compat
nf_tabs
CPU: 0 UID: 0 PID: 1 Comm: shutdown Tainted: G W
6.14.0+ #2 PREEMPT(undef) 271a3d276f79e3bb26d6065917556e94aae0d88d
Tainted: [W]=WARN
Hardware name: ASUS System Product Name/PRIME Z690-P D4, BIOS 0603 11/01/2021
RIP: 0010:call_fib4_notifiers (net/ipv4/fib_notifier.c:22 (discriminator 3))
Code: ca ff 80 3d 20 f8 05 09 00 75 88 ba 16 00 00 00 48 c7 c6 a0 c6
02 a4 48 c7 c7 e0 c6 02 a4 c6 05 04 f8 05 09 01 e8 0d 4e f3 fd <0f> 0b
e9e
All code
========
0: ca ff 80 lret $0x80ff
3: 3d 20 f8 05 09 cmp $0x905f820,%eax
8: 00 75 88 add %dh,-0x78(%rbp)
b: ba 16 00 00 00 mov $0x16,%edx
10: 48 c7 c6 a0 c6 02 a4 mov $0xffffffffa402c6a0,%rsi
17: 48 c7 c7 e0 c6 02 a4 mov $0xffffffffa402c6e0,%rdi
1e: c6 05 04 f8 05 09 01 movb $0x1,0x905f804(%rip) # 0x905f829
25: e8 0d 4e f3 fd call 0xfffffffffdf34e37
2a:* 0f 0b ud2 <-- trapping instruction
2c: 9e sahf
Code starting with the faulting instruction
===========================================
0: 0f 0b ud2
2: 9e sahf
RSP: 0018:ffff888104e2f990 EFLAGS: 00010282
RAX: 0000000000000000 RBX: ffff88813a8cdc97 RCX: 0000000000000000
RDX: 0000000000000002 RSI: 0000000000000004 RDI: 0000000000000001
RBP: ffffffffb0a15f40 R08: 0000000000000000 R09: fffffbfff49a4af4
R10: 0000000000000003 R11: 0000000000000001 R12: ffff888104e2fa40
R13: 0000000000000007 R14: ffff888178e24000 R15: dffffc0000000000
FS: 00007f7f27cb4440(0000) GS:ffff88886dc22000(0000) knlGS:0000000000000000
CS: 0010 DS: 0000 ES: 0000 CR0: 0000000080050033
CR2: 00007ffc65d6b0cc CR3: 00000001d73de000 CR4: 00000000007506f0
PKRU: 55555554
Call Trace:
<TASK>
? __warn (kernel/panic.c:748)
? __pfx_vprintk_emit.part.0 (kernel/printk/printk.c:2378)
? call_fib4_notifiers (net/ipv4/fib_notifier.c:22 (discriminator 3))
? report_bug (lib/bug.c:201 lib/bug.c:219)
? call_fib4_notifiers (net/ipv4/fib_notifier.c:22 (discriminator 3))
? handle_bug (arch/x86/kernel/traps.c:337)
? exc_invalid_op (arch/x86/kernel/traps.c:391 (discriminator 1))
? asm_exc_invalid_op (./arch/x86/include/asm/idtentry.h:578)
? call_fib4_notifiers (net/ipv4/fib_notifier.c:22 (discriminator 3))
fib_sync_down_dev (net/ipv4/fib_semantics.c:1869 net/ipv4/fib_semantics.c:1971)
? __pfx_fib_sync_down_dev (net/ipv4/fib_semantics.c:1937)
? __wake_up (kernel/sched/wait.c:110 kernel/sched/wait.c:127)
fib_netdev_event (net/ipv4/fib_frontend.c:1454 net/ipv4/fib_frontend.c:1524)
notifier_call_chain (kernel/notifier.c:85)
dev_close_many (net/core/dev.c:1789)
? __pfx_dev_close_many (net/core/dev.c:1776)
netif_close (./include/linux/list.h:124 ./include/linux/list.h:215
./include/linux/list.h:229 net/core/dev.c:1802 net/core/dev.c:1795)
? __pfx_netif_close (net/core/dev.c:1796)
? mark_held_locks (kernel/locking/lockdep.c:4326)
bnxt_shutdown (drivers/net/ethernet/broadcom/bnxt/bnxt.c:16707) bnxt_en
pci_device_shutdown (drivers/pci/pci-driver.c:511)
device_shutdown (drivers/base/core.c:4820)
kernel_restart (kernel/reboot.c:271 kernel/reboot.c:285)
__do_sys_reboot (kernel/reboot.c:763)
? __pfx___do_sys_reboot (kernel/reboot.c:725)
? rseq_get_rseq_cs (kernel/rseq.c:310)
? rseq_syscall (kernel/rseq.c:465)
? __pfx_rseq_syscall (kernel/rseq.c:458)
? do_writev (fs/read_write.c:1101)
? __pfx_do_writev (fs/read_write.c:1091)
do_syscall_64 (arch/x86/entry/syscall_64.c:63 arch/x86/entry/syscall_64.c:94)
entry_SYSCALL_64_after_hwframe (arch/x86/entry/entry_64.S:130)
RIP: 0033:0x7f7f28830a07
Code: c7 c0 ff ff ff ff eb be 66 2e 0f 1f 84 00 00 00 00 00 90 f3 0f
1e fa 89 fa be 69 19 12 28 bf ad de e1 fe b8 a9 00 00 00 0f 05 <48> 3d
008
All code
========
0: c7 c0 ff ff ff ff mov $0xffffffff,%eax
6: eb be jmp 0xffffffffffffffc6
8: 66 2e 0f 1f 84 00 00 cs nopw 0x0(%rax,%rax,1)
f: 00 00 00
12: 90 nop
13: f3 0f 1e fa endbr64
17: 89 fa mov %edi,%edx
19: be 69 19 12 28 mov $0x28121969,%esi
1e: bf ad de e1 fe mov $0xfee1dead,%edi
23: b8 a9 00 00 00 mov $0xa9,%eax
28: 0f 05 syscall
2a:* 48 rex.W <-- trapping instruction
2b: 3d .byte 0x3d
2c: 08 .byte 0x8
Code starting with the faulting instruction
===========================================
0: 48 rex.W
1: 3d .byte 0x3d
2: 08 .byte 0x8
RSP: 002b:00007ffc65d6b1a8 EFLAGS: 00000246 ORIG_RAX: 00000000000000a9
RAX: ffffffffffffffda RBX: 0000000000000003 RCX: 00007f7f28830a07
RDX: 0000000001234567 RSI: 0000000028121969 RDI: 00000000fee1dead
RBP: 00007ffc65d6b3e0 R08: 0000000000000069 R09: 0000000000000000
R10: 0000000000000000 R11: 0000000000000246 R12: 0000000000000000
R13: 0000000000000000 R14: 0000000000000000 R15: 0000000001234567
</TASK>
irq event stamp: 12763011
hardirqs last enabled at (12763023): __up_console_sem
(kernel/printk/printk.c:344 (discriminator 1))
hardirqs last disabled at (12763034): __up_console_sem
(kernel/printk/printk.c:342 (discriminator 1))
softirqs last enabled at (12762816): __irq_exit_rcu
(kernel/softirq.c:596 kernel/softirq.c:435 kernel/softirq.c:662)
softirqs last disabled at (12763055): __irq_exit_rcu
(kernel/softirq.c:596 kernel/softirq.c:435 kernel/softirq.c:662)
---[ end trace 0000000000000000 ]---
=============================
WARNING: suspicious RCU usage
6.14.0+ #2 Tainted: G W
-----------------------------
net/ipv4/fib_trie.c:2034 suspicious rcu_dereference_protected() usage!
other info that might help us debug this:
rcu_scheduler_active = 2, debug_locks = 1
4 locks held by shutdown/1:
#0: ffffffffa4d58750 (system_transition_mutex){+.+.}-{4:4}, at:
__do_sys_reboot (kernel/reboot.c:760)
#1: ffff888114d0c1b8 (&dev->mutex){....}-{4:4}, at: device_shutdown
(./include/linux/device.h:922 drivers/base/core.c:4802)
#2: ffff8881152211b8 (&dev->mutex){....}-{4:4}, at: device_shutdown
(./include/linux/pm_runtime.h:121 drivers/base/core.c:4805)
#3: ffff888178e24d90 (&dev->lock){+.+.}-{4:4}, at: bnxt_shutdown
(drivers/net/ethernet/broadcom/bnxt/bnxt.c:16703) bnxt_en
stack backtrace:
CPU: 0 UID: 0 PID: 1 Comm: shutdown Tainted: G W
6.14.0+ #2 PREEMPT(undef) 271a3d276f79e3bb26d6065917556e94aae0d88d
Tainted: [W]=WARN
Hardware name: ASUS System Product Name/PRIME Z690-P D4, BIOS 0603 11/01/2021
Call Trace:
<TASK>
dump_stack_lvl (lib/dump_stack.c:123)
lockdep_rcu_suspicious (kernel/locking/lockdep.c:6863)
fib_table_flush (net/ipv4/fib_trie.c:2034 (discriminator 7))
? fib_sync_down_dev (net/ipv4/fib_semantics.c:1996)
? __pfx_fib_table_flush (net/ipv4/fib_trie.c:2001)
? __pfx_fib_sync_down_dev (net/ipv4/fib_semantics.c:1937)
fib_flush (net/ipv4/fib_frontend.c:195 (discriminator 11))
fib_netdev_event (net/ipv4/fib_frontend.c:1458 net/ipv4/fib_frontend.c:1545)
notifier_call_chain (kernel/notifier.c:85)
dev_close_many (net/core/dev.c:1789)
? __pfx_dev_close_many (net/core/dev.c:1776)
netif_close (./include/linux/list.h:124 ./include/linux/list.h:215
./include/linux/list.h:229 net/core/dev.c:1802 net/core/dev.c:1795)
? __pfx_netif_close (net/core/dev.c:1796)
? mark_held_locks (kernel/locking/lockdep.c:4326)
bnxt_shutdown (drivers/net/ethernet/broadcom/bnxt/bnxt.c:16707) bnxt_en
pci_device_shutdown (drivers/pci/pci-driver.c:511)
device_shutdown (drivers/base/core.c:4820)
kernel_restart (kernel/reboot.c:271 kernel/reboot.c:285)
__do_sys_reboot (kernel/reboot.c:763)
? __pfx___do_sys_reboot (kernel/reboot.c:725)
? rseq_get_rseq_cs (kernel/rseq.c:310)
? rseq_syscall (kernel/rseq.c:465)
? __pfx_rseq_syscall (kernel/rseq.c:458)
? do_writev (fs/read_write.c:1101)
? __pfx_do_writev (fs/read_write.c:1091)
do_syscall_64 (arch/x86/entry/syscall_64.c:63 arch/x86/entry/syscall_64.c:94)
entry_SYSCALL_64_after_hwframe (arch/x86/entry/entry_64.S:130)
RIP: 0033:0x7f7f28830a07
Code: c7 c0 ff ff ff ff eb be 66 2e 0f 1f 84 00 00 00 00 00 90 f3 0f
1e fa 89 fa be 69 19 12 28 bf ad de e1 fe b8 a9 00 00 00 0f 05 <48> 3d
008
All code
========
0: c7 c0 ff ff ff ff mov $0xffffffff,%eax
6: eb be jmp 0xffffffffffffffc6
8: 66 2e 0f 1f 84 00 00 cs nopw 0x0(%rax,%rax,1)
f: 00 00 00
12: 90 nop
13: f3 0f 1e fa endbr64
17: 89 fa mov %edi,%edx
19: be 69 19 12 28 mov $0x28121969,%esi
1e: bf ad de e1 fe mov $0xfee1dead,%edi
23: b8 a9 00 00 00 mov $0xa9,%eax
28: 0f 05 syscall
2a:* 48 rex.W <-- trapping instruction
2b: 3d .byte 0x3d
2c: 08 .byte 0x8
Code starting with the faulting instruction
===========================================
0: 48 rex.W
1: 3d .byte 0x3d
2: 08 .byte 0x8
RSP: 002b:00007ffc65d6b1a8 EFLAGS: 00000246 ORIG_RAX: 00000000000000a9
RAX: ffffffffffffffda RBX: 0000000000000003 RCX: 00007f7f28830a07
RDX: 0000000001234567 RSI: 0000000028121969 RDI: 00000000fee1dead
RBP: 00007ffc65d6b3e0 R08: 0000000000000069 R09: 0000000000000000
R10: 0000000000000000 R11: 0000000000000246 R12: 0000000000000000
R13: 0000000000000000 R14: 0000000000000000 R15: 0000000001234567
</TASK>
=============================
WARNING: suspicious RCU usage
6.14.0+ #2 Tainted: G W
-----------------------------
net/ipv4/fib_trie.c:721 suspicious rcu_dereference_protected() usage!
other info that might help us debug this:
rcu_scheduler_active = 2, debug_locks = 1
4 locks held by shutdown/1:
#0: ffffffffa4d58750 (system_transition_mutex){+.+.}-{4:4}, at:
__do_sys_reboot (kernel/reboot.c:760)
#1: ffff888114d0c1b8 (&dev->mutex){....}-{4:4}, at: device_shutdown
(./include/linux/device.h:922 drivers/base/core.c:4802)
#2: ffff8881152211b8 (&dev->mutex){....}-{4:4}, at: device_shutdown
(./include/linux/pm_runtime.h:121 drivers/base/core.c:4805)
#3: ffff888178e24d90 (&dev->lock){+.+.}-{4:4}, at: bnxt_shutdown
(drivers/net/ethernet/broadcom/bnxt/bnxt.c:16703) bnxt_en
stack backtrace:
CPU: 0 UID: 0 PID: 1 Comm: shutdown Tainted: G W
6.14.0+ #2 PREEMPT(undef) 271a3d276f79e3bb26d6065917556e94aae0d88d
Tainted: [W]=WARN
Hardware name: ASUS System Product Name/PRIME Z690-P D4, BIOS 0603 11/01/2021
Call Trace:
<TASK>
dump_stack_lvl (lib/dump_stack.c:123)
lockdep_rcu_suspicious (kernel/locking/lockdep.c:6863)
update_suffix (net/ipv4/fib_trie.c:721 (discriminator 7))
fib_table_flush (net/ipv4/fib_trie.c:2024)
? fib_sync_down_dev (net/ipv4/fib_semantics.c:1996)
? __pfx_fib_table_flush (net/ipv4/fib_trie.c:2001)
? __pfx_fib_sync_down_dev (net/ipv4/fib_semantics.c:1937)
fib_flush (net/ipv4/fib_frontend.c:195 (discriminator 11))
fib_netdev_event (net/ipv4/fib_frontend.c:1458 net/ipv4/fib_frontend.c:1545)
notifier_call_chain (kernel/notifier.c:85)
dev_close_many (net/core/dev.c:1789)
? __pfx_dev_close_many (net/core/dev.c:1776)
netif_close (./include/linux/list.h:124 ./include/linux/list.h:215
./include/linux/list.h:229 net/core/dev.c:1802 net/core/dev.c:1795)
? __pfx_netif_close (net/core/dev.c:1796)
? mark_held_locks (kernel/locking/lockdep.c:4326)
bnxt_shutdown (drivers/net/ethernet/broadcom/bnxt/bnxt.c:16707) bnxt_en
pci_device_shutdown (drivers/pci/pci-driver.c:511)
device_shutdown (drivers/base/core.c:4820)
kernel_restart (kernel/reboot.c:271 kernel/reboot.c:285)
__do_sys_reboot (kernel/reboot.c:763)
? __pfx___do_sys_reboot (kernel/reboot.c:725)
? rseq_get_rseq_cs (kernel/rseq.c:310)
? rseq_syscall (kernel/rseq.c:465)
? __pfx_rseq_syscall (kernel/rseq.c:458)
? do_writev (fs/read_write.c:1101)
? __pfx_do_writev (fs/read_write.c:1091)
do_syscall_64 (arch/x86/entry/syscall_64.c:63 arch/x86/entry/syscall_64.c:94)
entry_SYSCALL_64_after_hwframe (arch/x86/entry/entry_64.S:130)
RIP: 0033:0x7f7f28830a07
Code: c7 c0 ff ff ff ff eb be 66 2e 0f 1f 84 00 00 00 00 00 90 f3 0f
1e fa 89 fa be 69 19 12 28 bf ad de e1 fe b8 a9 00 00 00 0f 05 <48> 3d
008
All code
========
0: c7 c0 ff ff ff ff mov $0xffffffff,%eax
6: eb be jmp 0xffffffffffffffc6
8: 66 2e 0f 1f 84 00 00 cs nopw 0x0(%rax,%rax,1)
f: 00 00 00
12: 90 nop
13: f3 0f 1e fa endbr64
17: 89 fa mov %edi,%edx
19: be 69 19 12 28 mov $0x28121969,%esi
1e: bf ad de e1 fe mov $0xfee1dead,%edi
23: b8 a9 00 00 00 mov $0xa9,%eax
28: 0f 05 syscall
2a:* 48 rex.W <-- trapping instruction
2b: 3d .byte 0x3d
2c: 08 .byte 0x8
Code starting with the faulting instruction
===========================================
0: 48 rex.W
1: 3d .byte 0x3d
2: 08 .byte 0x8
RSP: 002b:00007ffc65d6b1a8 EFLAGS: 00000246 ORIG_RAX: 00000000000000a9
RAX: ffffffffffffffda RBX: 0000000000000003 RCX: 00007f7f28830a07
RDX: 0000000001234567 RSI: 0000000028121969 RDI: 00000000fee1dead
RBP: 00007ffc65d6b3e0 R08: 0000000000000069 R09: 0000000000000000
R10: 0000000000000000 R11: 0000000000000246 R12: 0000000000000000
R13: 0000000000000000 R14: 0000000000000000 R15: 0000000001234567
</TASK>
=============================
WARNING: suspicious RCU usage
6.14.0+ #2 Tainted: G W
-----------------------------
net/ipv4/fib_trie.c:847 suspicious rcu_dereference_protected() usage!
other info that might help us debug this:
rcu_scheduler_active = 2, debug_locks = 1
4 locks held by shutdown/1:
#0: ffffffffa4d58750 (system_transition_mutex){+.+.}-{4:4}, at:
__do_sys_reboot (kernel/reboot.c:760)
#1: ffff888114d0c1b8 (&dev->mutex){....}-{4:4}, at: device_shutdown
(./include/linux/device.h:922 drivers/base/core.c:4802)
#2: ffff8881152211b8 (&dev->mutex){....}-{4:4}, at: device_shutdown
(./include/linux/pm_runtime.h:121 drivers/base/core.c:4805)
#3: ffff888178e24d90 (&dev->lock){+.+.}-{4:4}, at: bnxt_shutdown
(drivers/net/ethernet/broadcom/bnxt/bnxt.c:16703) bnxt_en
stack backtrace:
CPU: 0 UID: 0 PID: 1 Comm: shutdown Tainted: G W
6.14.0+ #2 PREEMPT(undef) 271a3d276f79e3bb26d6065917556e94aae0d88d
Tainted: [W]=WARN
Hardware name: ASUS System Product Name/PRIME Z690-P D4, BIOS 0603 11/01/2021
Call Trace:
<TASK>
dump_stack_lvl (lib/dump_stack.c:123)
lockdep_rcu_suspicious (kernel/locking/lockdep.c:6863)
resize (net/ipv4/fib_trie.c:847 (discriminator 7))
? nbcon_cpu_emergency_exit (./arch/x86/include/asm/preempt.h:104
kernel/printk/nbcon.c:1657)
? lockdep_rcu_suspicious (./include/linux/context_tracking.h:159
kernel/locking/lockdep.c:6864)
? update_suffix (net/ipv4/fib_trie.c:721 (discriminator 7))
fib_table_flush (net/ipv4/fib_trie.c:2027)
? fib_sync_down_dev (net/ipv4/fib_semantics.c:1996)
? __pfx_fib_table_flush (net/ipv4/fib_trie.c:2001)
? __pfx_fib_sync_down_dev (net/ipv4/fib_semantics.c:1937)
fib_flush (net/ipv4/fib_frontend.c:195 (discriminator 11))
fib_netdev_event (net/ipv4/fib_frontend.c:1458 net/ipv4/fib_frontend.c:1545)
notifier_call_chain (kernel/notifier.c:85)
dev_close_many (net/core/dev.c:1789)
? __pfx_dev_close_many (net/core/dev.c:1776)
netif_close (./include/linux/list.h:124 ./include/linux/list.h:215
./include/linux/list.h:229 net/core/dev.c:1802 net/core/dev.c:1795)
? __pfx_netif_close (net/core/dev.c:1796)
? mark_held_locks (kernel/locking/lockdep.c:4326)
bnxt_shutdown (drivers/net/ethernet/broadcom/bnxt/bnxt.c:16707) bnxt_en
pci_device_shutdown (drivers/pci/pci-driver.c:511)
device_shutdown (drivers/base/core.c:4820)
kernel_restart (kernel/reboot.c:271 kernel/reboot.c:285)
__do_sys_reboot (kernel/reboot.c:763)
? __pfx___do_sys_reboot (kernel/reboot.c:725)
? rseq_get_rseq_cs (kernel/rseq.c:310)
? rseq_syscall (kernel/rseq.c:465)
? __pfx_rseq_syscall (kernel/rseq.c:458)
? do_writev (fs/read_write.c:1101)
? __pfx_do_writev (fs/read_write.c:1091)
do_syscall_64 (arch/x86/entry/syscall_64.c:63 arch/x86/entry/syscall_64.c:94)
entry_SYSCALL_64_after_hwframe (arch/x86/entry/entry_64.S:130)
RIP: 0033:0x7f7f28830a07
Code: c7 c0 ff ff ff ff eb be 66 2e 0f 1f 84 00 00 00 00 00 90 f3 0f
1e fa 89 fa be 69 19 12 28 bf ad de e1 fe b8 a9 00 00 00 0f 05 <48> 3d
008
All code
========
0: c7 c0 ff ff ff ff mov $0xffffffff,%eax
6: eb be jmp 0xffffffffffffffc6
8: 66 2e 0f 1f 84 00 00 cs nopw 0x0(%rax,%rax,1)
f: 00 00 00
12: 90 nop
13: f3 0f 1e fa endbr64
17: 89 fa mov %edi,%edx
19: be 69 19 12 28 mov $0x28121969,%esi
1e: bf ad de e1 fe mov $0xfee1dead,%edi
23: b8 a9 00 00 00 mov $0xa9,%eax
28: 0f 05 syscall
2a:* 48 rex.W <-- trapping instruction
2b: 3d .byte 0x3d
2c: 08 .byte 0x8
Code starting with the faulting instruction
===========================================
0: 48 rex.W
1: 3d .byte 0x3d
2: 08 .byte 0x8
RSP: 002b:00007ffc65d6b1a8 EFLAGS: 00000246 ORIG_RAX: 00000000000000a9
RAX: ffffffffffffffda RBX: 0000000000000003 RCX: 00007f7f28830a07
RDX: 0000000001234567 RSI: 0000000028121969 RDI: 00000000fee1dead
RBP: 00007ffc65d6b3e0 R08: 0000000000000069 R09: 0000000000000000
R10: 0000000000000000 R11: 0000000000000246 R12: 0000000000000000
R13: 0000000000000000 R14: 0000000000000000 R15: 0000000001234567
</TASK>
=============================
WARNING: suspicious RCU usage
6.14.0+ #2 Tainted: G W
-----------------------------
net/ipv4/fib_trie.c:858 suspicious rcu_dereference_protected() usage!
other info that might help us debug this:
rcu_scheduler_active = 2, debug_locks = 1
4 locks held by shutdown/1:
#0: ffffffffa4d58750 (system_transition_mutex){+.+.}-{4:4}, at:
__do_sys_reboot (kernel/reboot.c:760)
#1: ffff888114d0c1b8 (&dev->mutex){....}-{4:4}, at: device_shutdown
(./include/linux/device.h:922 drivers/base/core.c:4802)
#2: ffff8881152211b8 (&dev->mutex){....}-{4:4}, at: device_shutdown
(./include/linux/pm_runtime.h:121 drivers/base/core.c:4805)
#3: ffff888178e24d90 (&dev->lock){+.+.}-{4:4}, at: bnxt_shutdown
(drivers/net/ethernet/broadcom/bnxt/bnxt.c:16703) bnxt_en
stack backtrace:
CPU: 0 UID: 0 PID: 1 Comm: shutdown Tainted: G W
6.14.0+ #2 PREEMPT(undef) 271a3d276f79e3bb26d6065917556e94aae0d88d
Tainted: [W]=WARN
Hardware name: ASUS System Product Name/PRIME Z690-P D4, BIOS 0603 11/01/2021
Call Trace:
<TASK>
dump_stack_lvl (lib/dump_stack.c:123)
lockdep_rcu_suspicious (kernel/locking/lockdep.c:6863)
resize (net/ipv4/fib_trie.c:858 (discriminator 7))
? nbcon_cpu_emergency_exit (./arch/x86/include/asm/preempt.h:104
kernel/printk/nbcon.c:1657)
? lockdep_rcu_suspicious (./include/linux/context_tracking.h:159
kernel/locking/lockdep.c:6864)
? update_suffix (net/ipv4/fib_trie.c:721 (discriminator 7))
fib_table_flush (net/ipv4/fib_trie.c:2027)
? fib_sync_down_dev (net/ipv4/fib_semantics.c:1996)
? __pfx_fib_table_flush (net/ipv4/fib_trie.c:2001)
? __pfx_fib_sync_down_dev (net/ipv4/fib_semantics.c:1937)
fib_flush (net/ipv4/fib_frontend.c:195 (discriminator 11))
fib_netdev_event (net/ipv4/fib_frontend.c:1458 net/ipv4/fib_frontend.c:1545)
notifier_call_chain (kernel/notifier.c:85)
dev_close_many (net/core/dev.c:1789)
? __pfx_dev_close_many (net/core/dev.c:1776)
netif_close (./include/linux/list.h:124 ./include/linux/list.h:215
./include/linux/list.h:229 net/core/dev.c:1802 net/core/dev.c:1795)
? __pfx_netif_close (net/core/dev.c:1796)
? mark_held_locks (kernel/locking/lockdep.c:4326)
bnxt_shutdown (drivers/net/ethernet/broadcom/bnxt/bnxt.c:16707) bnxt_en
pci_device_shutdown (drivers/pci/pci-driver.c:511)
device_shutdown (drivers/base/core.c:4820)
kernel_restart (kernel/reboot.c:271 kernel/reboot.c:285)
__do_sys_reboot (kernel/reboot.c:763)
? __pfx___do_sys_reboot (kernel/reboot.c:725)
? rseq_get_rseq_cs (kernel/rseq.c:310)
? rseq_syscall (kernel/rseq.c:465)
? __pfx_rseq_syscall (kernel/rseq.c:458)
? do_writev (fs/read_write.c:1101)
? __pfx_do_writev (fs/read_write.c:1091)
do_syscall_64 (arch/x86/entry/syscall_64.c:63 arch/x86/entry/syscall_64.c:94)
entry_SYSCALL_64_after_hwframe (arch/x86/entry/entry_64.S:130)
RIP: 0033:0x7f7f28830a07
Code: c7 c0 ff ff ff ff eb be 66 2e 0f 1f 84 00 00 00 00 00 90 f3 0f
1e fa 89 fa be 69 19 12 28 bf ad de e1 fe b8 a9 00 00 00 0f 05 <48> 3d
008
All code
========
0: c7 c0 ff ff ff ff mov $0xffffffff,%eax
6: eb be jmp 0xffffffffffffffc6
8: 66 2e 0f 1f 84 00 00 cs nopw 0x0(%rax,%rax,1)
f: 00 00 00
12: 90 nop
13: f3 0f 1e fa endbr64
17: 89 fa mov %edi,%edx
19: be 69 19 12 28 mov $0x28121969,%esi
1e: bf ad de e1 fe mov $0xfee1dead,%edi
23: b8 a9 00 00 00 mov $0xa9,%eax
28: 0f 05 syscall
2a:* 48 rex.W <-- trapping instruction
2b: 3d .byte 0x3d
2c: 08 .byte 0x8
Code starting with the faulting instruction
===========================================
0: 48 rex.W
1: 3d .byte 0x3d
2: 08 .byte 0x8
RSP: 002b:00007ffc65d6b1a8 EFLAGS: 00000246 ORIG_RAX: 00000000000000a9
RAX: ffffffffffffffda RBX: 0000000000000003 RCX: 00007f7f28830a07
RDX: 0000000001234567 RSI: 0000000028121969 RDI: 00000000fee1dead
RBP: 00007ffc65d6b3e0 R08: 0000000000000069 R09: 0000000000000000
R10: 0000000000000000 R11: 0000000000000246 R12: 0000000000000000
R13: 0000000000000000 R14: 0000000000000000 R15: 0000000001234567
</TASK>
=============================
WARNING: suspicious RCU usage
6.14.0+ #2 Tainted: G W
-----------------------------
net/ipv4/fib_trie.c:877 suspicious rcu_dereference_protected() usage!
other info that might help us debug this:
rcu_scheduler_active = 2, debug_locks = 1
4 locks held by shutdown/1:
#0: ffffffffa4d58750 (system_transition_mutex){+.+.}-{4:4}, at:
__do_sys_reboot (kernel/reboot.c:760)
#1: ffff888114d0c1b8 (&dev->mutex){....}-{4:4}, at: device_shutdown
(./include/linux/device.h:922 drivers/base/core.c:4802)
#2: ffff8881152211b8 (&dev->mutex){....}-{4:4}, at: device_shutdown
(./include/linux/pm_runtime.h:121 drivers/base/core.c:4805)
#3: ffff888178e24d90 (&dev->lock){+.+.}-{4:4}, at: bnxt_shutdown
(drivers/net/ethernet/broadcom/bnxt/bnxt.c:16703) bnxt_en
stack backtrace:
CPU: 0 UID: 0 PID: 1 Comm: shutdown Tainted: G W
6.14.0+ #2 PREEMPT(undef) 271a3d276f79e3bb26d6065917556e94aae0d88d
Tainted: [W]=WARN
Hardware name: ASUS System Product Name/PRIME Z690-P D4, BIOS 0603 11/01/2021
Call Trace:
<TASK>
dump_stack_lvl (lib/dump_stack.c:123)
lockdep_rcu_suspicious (kernel/locking/lockdep.c:6863)
resize (net/ipv4/fib_trie.c:877 (discriminator 7))
? nbcon_cpu_emergency_exit (./arch/x86/include/asm/preempt.h:104
kernel/printk/nbcon.c:1657)
? lockdep_rcu_suspicious (./include/linux/context_tracking.h:159
kernel/locking/lockdep.c:6864)
? update_suffix (net/ipv4/fib_trie.c:721 (discriminator 7))
fib_table_flush (net/ipv4/fib_trie.c:2027)
? fib_sync_down_dev (net/ipv4/fib_semantics.c:1996)
? __pfx_fib_table_flush (net/ipv4/fib_trie.c:2001)
? __pfx_fib_sync_down_dev (net/ipv4/fib_semantics.c:1937)
fib_flush (net/ipv4/fib_frontend.c:195 (discriminator 11))
fib_netdev_event (net/ipv4/fib_frontend.c:1458 net/ipv4/fib_frontend.c:1545)
notifier_call_chain (kernel/notifier.c:85)
dev_close_many (net/core/dev.c:1789)
? __pfx_dev_close_many (net/core/dev.c:1776)
netif_close (./include/linux/list.h:124 ./include/linux/list.h:215
./include/linux/list.h:229 net/core/dev.c:1802 net/core/dev.c:1795)
? __pfx_netif_close (net/core/dev.c:1796)
? mark_held_locks (kernel/locking/lockdep.c:4326)
bnxt_shutdown (drivers/net/ethernet/broadcom/bnxt/bnxt.c:16707) bnxt_en
pci_device_shutdown (drivers/pci/pci-driver.c:511)
device_shutdown (drivers/base/core.c:4820)
kernel_restart (kernel/reboot.c:271 kernel/reboot.c:285)
__do_sys_reboot (kernel/reboot.c:763)
? __pfx___do_sys_reboot (kernel/reboot.c:725)
? rseq_get_rseq_cs (kernel/rseq.c:310)
? rseq_syscall (kernel/rseq.c:465)
? __pfx_rseq_syscall (kernel/rseq.c:458)
? do_writev (fs/read_write.c:1101)
? __pfx_do_writev (fs/read_write.c:1091)
do_syscall_64 (arch/x86/entry/syscall_64.c:63 arch/x86/entry/syscall_64.c:94)
entry_SYSCALL_64_after_hwframe (arch/x86/entry/entry_64.S:130)
RIP: 0033:0x7f7f28830a07
Code: c7 c0 ff ff ff ff eb be 66 2e 0f 1f 84 00 00 00 00 00 90 f3 0f
1e fa 89 fa be 69 19 12 28 bf ad de e1 fe b8 a9 00 00 00 0f 05 <48> 3d
008
All code
========
0: c7 c0 ff ff ff ff mov $0xffffffff,%eax
6: eb be jmp 0xffffffffffffffc6
8: 66 2e 0f 1f 84 00 00 cs nopw 0x0(%rax,%rax,1)
f: 00 00 00
12: 90 nop
13: f3 0f 1e fa endbr64
17: 89 fa mov %edi,%edx
19: be 69 19 12 28 mov $0x28121969,%esi
1e: bf ad de e1 fe mov $0xfee1dead,%edi
23: b8 a9 00 00 00 mov $0xa9,%eax
28: 0f 05 syscall
2a:* 48 rex.W <-- trapping instruction
2b: 3d .byte 0x3d
2c: 08 .byte 0x8
Code starting with the faulting instruction
===========================================
0: 48 rex.W
1: 3d .byte 0x3d
2: 08 .byte 0x8
RSP: 002b:00007ffc65d6b1a8 EFLAGS: 00000246 ORIG_RAX: 00000000000000a9
RAX: ffffffffffffffda RBX: 0000000000000003 RCX: 00007f7f28830a07
RDX: 0000000001234567 RSI: 0000000028121969 RDI: 00000000fee1dead
RBP: 00007ffc65d6b3e0 R08: 0000000000000069 R09: 0000000000000000
R10: 0000000000000000 R11: 0000000000000246 R12: 0000000000000000
R13: 0000000000000000 R14: 0000000000000000 R15: 0000000001234567
</TASK>
=============================
WARNING: suspicious RCU usage
6.14.0+ #2 Tainted: G W
-----------------------------
net/ipv4/fib_trie.c:904 suspicious rcu_dereference_protected() usage!
other info that might help us debug this:
rcu_scheduler_active = 2, debug_locks = 1
4 locks held by shutdown/1:
#0: ffffffffa4d58750 (system_transition_mutex){+.+.}-{4:4}, at:
__do_sys_reboot (kernel/reboot.c:760)
#1: ffff888114d0c1b8 (&dev->mutex){....}-{4:4}, at: device_shutdown
(./include/linux/device.h:922 drivers/base/core.c:4802)
#2: ffff8881152211b8 (&dev->mutex){....}-{4:4}, at: device_shutdown
(./include/linux/pm_runtime.h:121 drivers/base/core.c:4805)
#3: ffff888178e24d90 (&dev->lock){+.+.}-{4:4}, at: bnxt_shutdown
(drivers/net/ethernet/broadcom/bnxt/bnxt.c:16703) bnxt_en
stack backtrace:
CPU: 0 UID: 0 PID: 1 Comm: shutdown Tainted: G W
6.14.0+ #2 PREEMPT(undef) 271a3d276f79e3bb26d6065917556e94aae0d88d
Tainted: [W]=WARN
Hardware name: ASUS System Product Name/PRIME Z690-P D4, BIOS 0603 11/01/2021
Call Trace:
<TASK>
dump_stack_lvl (lib/dump_stack.c:123)
lockdep_rcu_suspicious (kernel/locking/lockdep.c:6863)
resize (net/ipv4/fib_trie.c:904 (discriminator 7))
? nbcon_cpu_emergency_exit (./arch/x86/include/asm/preempt.h:104
kernel/printk/nbcon.c:1657)
? lockdep_rcu_suspicious (./include/linux/context_tracking.h:159
kernel/locking/lockdep.c:6864)
? update_suffix (net/ipv4/fib_trie.c:721 (discriminator 7))
fib_table_flush (net/ipv4/fib_trie.c:2027)
? fib_sync_down_dev (net/ipv4/fib_semantics.c:1996)
? __pfx_fib_table_flush (net/ipv4/fib_trie.c:2001)
? __pfx_fib_sync_down_dev (net/ipv4/fib_semantics.c:1937)
fib_flush (net/ipv4/fib_frontend.c:195 (discriminator 11))
fib_netdev_event (net/ipv4/fib_frontend.c:1458 net/ipv4/fib_frontend.c:1545)
notifier_call_chain (kernel/notifier.c:85)
dev_close_many (net/core/dev.c:1789)
? __pfx_dev_close_many (net/core/dev.c:1776)
netif_close (./include/linux/list.h:124 ./include/linux/list.h:215
./include/linux/list.h:229 net/core/dev.c:1802 net/core/dev.c:1795)
? __pfx_netif_close (net/core/dev.c:1796)
? mark_held_locks (kernel/locking/lockdep.c:4326)
bnxt_shutdown (drivers/net/ethernet/broadcom/bnxt/bnxt.c:16707) bnxt_en
pci_device_shutdown (drivers/pci/pci-driver.c:511)
device_shutdown (drivers/base/core.c:4820)
kernel_restart (kernel/reboot.c:271 kernel/reboot.c:285)
__do_sys_reboot (kernel/reboot.c:763)
? __pfx___do_sys_reboot (kernel/reboot.c:725)
? rseq_get_rseq_cs (kernel/rseq.c:310)
? rseq_syscall (kernel/rseq.c:465)
? __pfx_rseq_syscall (kernel/rseq.c:458)
? do_writev (fs/read_write.c:1101)
? __pfx_do_writev (fs/read_write.c:1091)
do_syscall_64 (arch/x86/entry/syscall_64.c:63 arch/x86/entry/syscall_64.c:94)
entry_SYSCALL_64_after_hwframe (arch/x86/entry/entry_64.S:130)
RIP: 0033:0x7f7f28830a07
Code: c7 c0 ff ff ff ff eb be 66 2e 0f 1f 84 00 00 00 00 00 90 f3 0f
1e fa 89 fa be 69 19 12 28 bf ad de e1 fe b8 a9 00 00 00 0f 05 <48> 3d
008
All code
========
0: c7 c0 ff ff ff ff mov $0xffffffff,%eax
6: eb be jmp 0xffffffffffffffc6
8: 66 2e 0f 1f 84 00 00 cs nopw 0x0(%rax,%rax,1)
f: 00 00 00
12: 90 nop
13: f3 0f 1e fa endbr64
17: 89 fa mov %edi,%edx
19: be 69 19 12 28 mov $0x28121969,%esi
1e: bf ad de e1 fe mov $0xfee1dead,%edi
23: b8 a9 00 00 00 mov $0xa9,%eax
28: 0f 05 syscall
2a:* 48 rex.W <-- trapping instruction
2b: 3d .byte 0x3d
2c: 08 .byte 0x8
Code starting with the faulting instruction
===========================================
0: 48 rex.W
1: 3d .byte 0x3d
2: 08 .byte 0x8
RSP: 002b:00007ffc65d6b1a8 EFLAGS: 00000246 ORIG_RAX: 00000000000000a9
RAX: ffffffffffffffda RBX: 0000000000000003 RCX: 00007f7f28830a07
RDX: 0000000001234567 RSI: 0000000028121969 RDI: 00000000fee1dead
RBP: 00007ffc65d6b3e0 R08: 0000000000000069 R09: 0000000000000000
R10: 0000000000000000 R11: 0000000000000246 R12: 0000000000000000
R13: 0000000000000000 R14: 0000000000000000 R15: 0000000001234567
</TASK>
------------[ cut here ]------------
RTNL: assertion failed at net/ipv4/fib_semantics.c (252)
WARNING: CPU: 0 PID: 1 at net/ipv4/fib_semantics.c:252
fib_release_info (net/ipv4/fib_semantics.c:252 (discriminator 3))
Modules linked in: xt_nat xt_tcpudp veth xt_conntrack nft_chain_nat
xt_MASQUERADE nf_conntrack_netlink xfrm_user xt_addrtype nft_compat
nf_tabs
CPU: 0 UID: 0 PID: 1 Comm: shutdown Tainted: G W
6.14.0+ #2 PREEMPT(undef) 271a3d276f79e3bb26d6065917556e94aae0d88d
Tainted: [W]=WARN
Hardware name: ASUS System Product Name/PRIME Z690-P D4, BIOS 0603 11/01/2021
RIP: 0010:fib_release_info (net/ipv4/fib_semantics.c:252 (discriminator 3))
Code: c3 08 08 09 00 0f 85 20 fb ff ff ba fc 00 00 00 48 c7 c6 20 a3
02 a4 48 c7 c7 60 a3 02 a4 c6 05 a3 08 08 09 01 e8 ae 5e f5 fd <0f> 0b
e91
All code
========
0: c3 ret
1: 08 08 or %cl,(%rax)
3: 09 00 or %eax,(%rax)
5: 0f 85 20 fb ff ff jne 0xfffffffffffffb2b
b: ba fc 00 00 00 mov $0xfc,%edx
10: 48 c7 c6 20 a3 02 a4 mov $0xffffffffa402a320,%rsi
17: 48 c7 c7 60 a3 02 a4 mov $0xffffffffa402a360,%rdi
1e: c6 05 a3 08 08 09 01 movb $0x1,0x90808a3(%rip) # 0x90808c8
25: e8 ae 5e f5 fd call 0xfffffffffdf55ed8
2a:* 0f 0b ud2 <-- trapping instruction
2c: 91 xchg %eax,%ecx
Code starting with the faulting instruction
===========================================
0: 0f 0b ud2
2: 91 xchg %eax,%ecx
RSP: 0018:ffff888104e2f930 EFLAGS: 00010282
RAX: 0000000000000000 RBX: dffffc0000000000 RCX: 0000000000000000
RDX: 0000000000000002 RSI: 0000000000000004 RDI: 0000000000000001
RBP: ffff88813a8ccd00 R08: 0000000000000000 R09: fffffbfff49a4af4
R10: 0000000000000003 R11: 0000000000000001 R12: ffff888108aeb200
R13: 0000000000000000 R14: ffff888137455168 R15: ffff888118b3fd20
FS: 00007f7f27cb4440(0000) GS:ffff88886dc22000(0000) knlGS:0000000000000000
CS: 0010 DS: 0000 ES: 0000 CR0: 0000000080050033
CR2: 00007ffc65d6b0cc CR3: 00000001d73de000 CR4: 00000000007506f0
PKRU: 55555554
Call Trace:
<TASK>
? __warn (kernel/panic.c:748)
? __pfx_vprintk_emit.part.0 (kernel/printk/printk.c:2378)
? fib_release_info (net/ipv4/fib_semantics.c:252 (discriminator 3))
? report_bug (lib/bug.c:201 lib/bug.c:219)
? fib_release_info (net/ipv4/fib_semantics.c:252 (discriminator 3))
? handle_bug (arch/x86/kernel/traps.c:337)
? exc_invalid_op (arch/x86/kernel/traps.c:391 (discriminator 1))
? asm_exc_invalid_op (./arch/x86/include/asm/idtentry.h:578)
? fib_release_info (net/ipv4/fib_semantics.c:252 (discriminator 3))
fib_table_flush (net/ipv4/fib_trie.c:297 net/ipv4/fib_trie.c:2071)
? __pfx_fib_table_flush (net/ipv4/fib_trie.c:2001)
? __pfx_fib_sync_down_dev (net/ipv4/fib_semantics.c:1937)
fib_flush (net/ipv4/fib_frontend.c:195 (discriminator 11))
fib_netdev_event (net/ipv4/fib_frontend.c:1458 net/ipv4/fib_frontend.c:1545)
notifier_call_chain (kernel/notifier.c:85)
dev_close_many (net/core/dev.c:1789)
? __pfx_dev_close_many (net/core/dev.c:1776)
netif_close (./include/linux/list.h:124 ./include/linux/list.h:215
./include/linux/list.h:229 net/core/dev.c:1802 net/core/dev.c:1795)
? __pfx_netif_close (net/core/dev.c:1796)
? mark_held_locks (kernel/locking/lockdep.c:4326)
bnxt_shutdown (drivers/net/ethernet/broadcom/bnxt/bnxt.c:16707) bnxt_en
pci_device_shutdown (drivers/pci/pci-driver.c:511)
device_shutdown (drivers/base/core.c:4820)
kernel_restart (kernel/reboot.c:271 kernel/reboot.c:285)
__do_sys_reboot (kernel/reboot.c:763)
? __pfx___do_sys_reboot (kernel/reboot.c:725)
? rseq_get_rseq_cs (kernel/rseq.c:310)
? rseq_syscall (kernel/rseq.c:465)
? __pfx_rseq_syscall (kernel/rseq.c:458)
? do_writev (fs/read_write.c:1101)
? __pfx_do_writev (fs/read_write.c:1091)
do_syscall_64 (arch/x86/entry/syscall_64.c:63 arch/x86/entry/syscall_64.c:94)
entry_SYSCALL_64_after_hwframe (arch/x86/entry/entry_64.S:130)
RIP: 0033:0x7f7f28830a07
Code: c7 c0 ff ff ff ff eb be 66 2e 0f 1f 84 00 00 00 00 00 90 f3 0f
1e fa 89 fa be 69 19 12 28 bf ad de e1 fe b8 a9 00 00 00 0f 05 <48> 3d
008
All code
========
0: c7 c0 ff ff ff ff mov $0xffffffff,%eax
6: eb be jmp 0xffffffffffffffc6
8: 66 2e 0f 1f 84 00 00 cs nopw 0x0(%rax,%rax,1)
f: 00 00 00
12: 90 nop
13: f3 0f 1e fa endbr64
17: 89 fa mov %edi,%edx
19: be 69 19 12 28 mov $0x28121969,%esi
1e: bf ad de e1 fe mov $0xfee1dead,%edi
23: b8 a9 00 00 00 mov $0xa9,%eax
28: 0f 05 syscall
2a:* 48 rex.W <-- trapping instruction
2b: 3d .byte 0x3d
2c: 08 .byte 0x8
Code starting with the faulting instruction
===========================================
0: 48 rex.W
1: 3d .byte 0x3d
2: 08 .byte 0x8
RSP: 002b:00007ffc65d6b1a8 EFLAGS: 00000246 ORIG_RAX: 00000000000000a9
RAX: ffffffffffffffda RBX: 0000000000000003 RCX: 00007f7f28830a07
RDX: 0000000001234567 RSI: 0000000028121969 RDI: 00000000fee1dead
RBP: 00007ffc65d6b3e0 R08: 0000000000000069 R09: 0000000000000000
R10: 0000000000000000 R11: 0000000000000246 R12: 0000000000000000
R13: 0000000000000000 R14: 0000000000000000 R15: 0000000001234567
</TASK>
irq event stamp: 12767447
hardirqs last enabled at (12767459): __up_console_sem
(kernel/printk/printk.c:344 (discriminator 1))
hardirqs last disabled at (12767470): __up_console_sem
(kernel/printk/printk.c:342 (discriminator 1))
softirqs last enabled at (12767280): __irq_exit_rcu
(kernel/softirq.c:596 kernel/softirq.c:435 kernel/softirq.c:662)
softirqs last disabled at (12767275): __irq_exit_rcu
(kernel/softirq.c:596 kernel/softirq.c:435 kernel/softirq.c:662)
---[ end trace 0000000000000000 ]---
=============================
WARNING: suspicious RCU usage
6.14.0+ #2 Tainted: G W
-----------------------------
net/ipv4/fib_trie.c:415 suspicious rcu_dereference_protected() usage!
other info that might help us debug this:
rcu_scheduler_active = 2, debug_locks = 1
4 locks held by shutdown/1:
#0: ffffffffa4d58750 (system_transition_mutex){+.+.}-{4:4}, at:
__do_sys_reboot (kernel/reboot.c:760)
#1: ffff888114d0c1b8 (&dev->mutex){....}-{4:4}, at: device_shutdown
(./include/linux/device.h:922 drivers/base/core.c:4802)
#2: ffff8881152211b8 (&dev->mutex){....}-{4:4}, at: device_shutdown
(./include/linux/pm_runtime.h:121 drivers/base/core.c:4805)
#3: ffff888178e24d90 (&dev->lock){+.+.}-{4:4}, at: bnxt_shutdown
(drivers/net/ethernet/broadcom/bnxt/bnxt.c:16703) bnxt_en
stack backtrace:
CPU: 0 UID: 0 PID: 1 Comm: shutdown Tainted: G W
6.14.0+ #2 PREEMPT(undef) 271a3d276f79e3bb26d6065917556e94aae0d88d
Tainted: [W]=WARN
Hardware name: ASUS System Product Name/PRIME Z690-P D4, BIOS 0603 11/01/2021
Call Trace:
<TASK>
dump_stack_lvl (lib/dump_stack.c:123)
lockdep_rcu_suspicious (kernel/locking/lockdep.c:6863)
put_child (net/ipv4/fib_trie.c:415 (discriminator 7))
fib_table_flush (net/ipv4/fib_trie.c:469 net/ipv4/fib_trie.c:2079)
? __pfx_fib_table_flush (net/ipv4/fib_trie.c:2001)
? __pfx_fib_sync_down_dev (net/ipv4/fib_semantics.c:1937)
fib_flush (net/ipv4/fib_frontend.c:195 (discriminator 11))
fib_netdev_event (net/ipv4/fib_frontend.c:1458 net/ipv4/fib_frontend.c:1545)
notifier_call_chain (kernel/notifier.c:85)
dev_close_many (net/core/dev.c:1789)
? __pfx_dev_close_many (net/core/dev.c:1776)
netif_close (./include/linux/list.h:124 ./include/linux/list.h:215
./include/linux/list.h:229 net/core/dev.c:1802 net/core/dev.c:1795)
? __pfx_netif_close (net/core/dev.c:1796)
? mark_held_locks (kernel/locking/lockdep.c:4326)
bnxt_shutdown (drivers/net/ethernet/broadcom/bnxt/bnxt.c:16707) bnxt_en
pci_device_shutdown (drivers/pci/pci-driver.c:511)
device_shutdown (drivers/base/core.c:4820)
kernel_restart (kernel/reboot.c:271 kernel/reboot.c:285)
__do_sys_reboot (kernel/reboot.c:763)
? __pfx___do_sys_reboot (kernel/reboot.c:725)
? rseq_get_rseq_cs (kernel/rseq.c:310)
? rseq_syscall (kernel/rseq.c:465)
? __pfx_rseq_syscall (kernel/rseq.c:458)
? do_writev (fs/read_write.c:1101)
? __pfx_do_writev (fs/read_write.c:1091)
do_syscall_64 (arch/x86/entry/syscall_64.c:63 arch/x86/entry/syscall_64.c:94)
entry_SYSCALL_64_after_hwframe (arch/x86/entry/entry_64.S:130)
RIP: 0033:0x7f7f28830a07
Code: c7 c0 ff ff ff ff eb be 66 2e 0f 1f 84 00 00 00 00 00 90 f3 0f
1e fa 89 fa be 69 19 12 28 bf ad de e1 fe b8 a9 00 00 00 0f 05 <48> 3d
008
All code
========
0: c7 c0 ff ff ff ff mov $0xffffffff,%eax
6: eb be jmp 0xffffffffffffffc6
8: 66 2e 0f 1f 84 00 00 cs nopw 0x0(%rax,%rax,1)
f: 00 00 00
12: 90 nop
13: f3 0f 1e fa endbr64
17: 89 fa mov %edi,%edx
19: be 69 19 12 28 mov $0x28121969,%esi
1e: bf ad de e1 fe mov $0xfee1dead,%edi
23: b8 a9 00 00 00 mov $0xa9,%eax
28: 0f 05 syscall
2a:* 48 rex.W <-- trapping instruction
2b: 3d .byte 0x3d
2c: 08 .byte 0x8
Code starting with the faulting instruction
===========================================
0: 48 rex.W
1: 3d .byte 0x3d
2: 08 .byte 0x8
RSP: 002b:00007ffc65d6b1a8 EFLAGS: 00000246 ORIG_RAX: 00000000000000a9
RAX: ffffffffffffffda RBX: 0000000000000003 RCX: 00007f7f28830a07
RDX: 0000000001234567 RSI: 0000000028121969 RDI: 00000000fee1dead
RBP: 00007ffc65d6b3e0 R08: 0000000000000069 R09: 0000000000000000
R10: 0000000000000000 R11: 0000000000000246 R12: 0000000000000000
R13: 0000000000000000 R14: 0000000000000000 R15: 0000000001234567
</TASK>
=============================
WARNING: suspicious RCU usage
6.14.0+ #2 Tainted: G W
-----------------------------
net/ipv4/fib_trie.c:690 suspicious rcu_dereference_protected() usage!
other info that might help us debug this:
rcu_scheduler_active = 2, debug_locks = 1
4 locks held by shutdown/1:
#0: ffffffffa4d58750 (system_transition_mutex){+.+.}-{4:4}, at:
__do_sys_reboot (kernel/reboot.c:760)
#1: ffff888114d0c1b8 (&dev->mutex){....}-{4:4}, at: device_shutdown
(./include/linux/device.h:922 drivers/base/core.c:4802)
#2: ffff8881152211b8 (&dev->mutex){....}-{4:4}, at: device_shutdown
(./include/linux/pm_runtime.h:121 drivers/base/core.c:4805)
#3: ffff888178e24d90 (&dev->lock){+.+.}-{4:4}, at: bnxt_shutdown
(drivers/net/ethernet/broadcom/bnxt/bnxt.c:16703) bnxt_en
stack backtrace:
CPU: 0 UID: 0 PID: 1 Comm: shutdown Tainted: G W
6.14.0+ #2 PREEMPT(undef) 271a3d276f79e3bb26d6065917556e94aae0d88d
Tainted: [W]=WARN
Hardware name: ASUS System Product Name/PRIME Z690-P D4, BIOS 0603 11/01/2021
Call Trace:
<TASK>
dump_stack_lvl (lib/dump_stack.c:123)
lockdep_rcu_suspicious (kernel/locking/lockdep.c:6863)
resize (net/ipv4/fib_trie.c:690 net/ipv4/fib_trie.c:901)
? update_suffix (net/ipv4/fib_trie.c:721 (discriminator 3))
fib_table_flush (net/ipv4/fib_trie.c:2027)
? __pfx_fib_table_flush (net/ipv4/fib_trie.c:2001)
? __pfx_fib_sync_down_dev (net/ipv4/fib_semantics.c:1937)
fib_flush (net/ipv4/fib_frontend.c:195 (discriminator 11))
fib_netdev_event (net/ipv4/fib_frontend.c:1458 net/ipv4/fib_frontend.c:1545)
notifier_call_chain (kernel/notifier.c:85)
dev_close_many (net/core/dev.c:1789)
? __pfx_dev_close_many (net/core/dev.c:1776)
netif_close (./include/linux/list.h:124 ./include/linux/list.h:215
./include/linux/list.h:229 net/core/dev.c:1802 net/core/dev.c:1795)
? __pfx_netif_close (net/core/dev.c:1796)
? mark_held_locks (kernel/locking/lockdep.c:4326)
bnxt_shutdown (drivers/net/ethernet/broadcom/bnxt/bnxt.c:16707) bnxt_en
pci_device_shutdown (drivers/pci/pci-driver.c:511)
device_shutdown (drivers/base/core.c:4820)
kernel_restart (kernel/reboot.c:271 kernel/reboot.c:285)
__do_sys_reboot (kernel/reboot.c:763)
? __pfx___do_sys_reboot (kernel/reboot.c:725)
? rseq_get_rseq_cs (kernel/rseq.c:310)
? rseq_syscall (kernel/rseq.c:465)
? __pfx_rseq_syscall (kernel/rseq.c:458)
? do_writev (fs/read_write.c:1101)
? __pfx_do_writev (fs/read_write.c:1091)
do_syscall_64 (arch/x86/entry/syscall_64.c:63 arch/x86/entry/syscall_64.c:94)
entry_SYSCALL_64_after_hwframe (arch/x86/entry/entry_64.S:130)
RIP: 0033:0x7f7f28830a07
Code: c7 c0 ff ff ff ff eb be 66 2e 0f 1f 84 00 00 00 00 00 90 f3 0f
1e fa 89 fa be 69 19 12 28 bf ad de e1 fe b8 a9 00 00 00 0f 05 <48> 3d
008
All code
========
0: c7 c0 ff ff ff ff mov $0xffffffff,%eax
6: eb be jmp 0xffffffffffffffc6
8: 66 2e 0f 1f 84 00 00 cs nopw 0x0(%rax,%rax,1)
f: 00 00 00
12: 90 nop
13: f3 0f 1e fa endbr64
17: 89 fa mov %edi,%edx
19: be 69 19 12 28 mov $0x28121969,%esi
1e: bf ad de e1 fe mov $0xfee1dead,%edi
23: b8 a9 00 00 00 mov $0xa9,%eax
28: 0f 05 syscall
2a:* 48 rex.W <-- trapping instruction
2b: 3d .byte 0x3d
2c: 08 .byte 0x8
Code starting with the faulting instruction
===========================================
0: 48 rex.W
1: 3d .byte 0x3d
2: 08 .byte 0x8
RSP: 002b:00007ffc65d6b1a8 EFLAGS: 00000246 ORIG_RAX: 00000000000000a9
RAX: ffffffffffffffda RBX: 0000000000000003 RCX: 00007f7f28830a07
RDX: 0000000001234567 RSI: 0000000028121969 RDI: 00000000fee1dead
RBP: 00007ffc65d6b3e0 R08: 0000000000000069 R09: 0000000000000000
R10: 0000000000000000 R11: 0000000000000246 R12: 0000000000000000
R13: 0000000000000000 R14: 0000000000000000 R15: 0000000001234567
</TASK>
=============================
WARNING: suspicious RCU usage
6.14.0+ #2 Tainted: G W
-----------------------------
net/ipv4/fib_trie.c:693 suspicious rcu_dereference_protected() usage!
other info that might help us debug this:
rcu_scheduler_active = 2, debug_locks = 1
4 locks held by shutdown/1:
#0: ffffffffa4d58750 (system_transition_mutex){+.+.}-{4:4}, at:
__do_sys_reboot (kernel/reboot.c:760)
#1: ffff888114d0c1b8 (&dev->mutex){....}-{4:4}, at: device_shutdown
(./include/linux/device.h:922 drivers/base/core.c:4802)
#2: ffff8881152211b8 (&dev->mutex){....}-{4:4}, at: device_shutdown
(./include/linux/pm_runtime.h:121 drivers/base/core.c:4805)
#3: ffff888178e24d90 (&dev->lock){+.+.}-{4:4}, at: bnxt_shutdown
(drivers/net/ethernet/broadcom/bnxt/bnxt.c:16703) bnxt_en
stack backtrace:
CPU: 0 UID: 0 PID: 1 Comm: shutdown Tainted: G W
6.14.0+ #2 PREEMPT(undef) 271a3d276f79e3bb26d6065917556e94aae0d88d
Tainted: [W]=WARN
Hardware name: ASUS System Product Name/PRIME Z690-P D4, BIOS 0603 11/01/2021
Call Trace:
<TASK>
dump_stack_lvl (lib/dump_stack.c:123)
lockdep_rcu_suspicious (kernel/locking/lockdep.c:6863)
resize (net/ipv4/fib_trie.c:693 net/ipv4/fib_trie.c:901)
? update_suffix (net/ipv4/fib_trie.c:721 (discriminator 3))
fib_table_flush (net/ipv4/fib_trie.c:2027)
? __pfx_fib_table_flush (net/ipv4/fib_trie.c:2001)
? __pfx_fib_sync_down_dev (net/ipv4/fib_semantics.c:1937)
fib_flush (net/ipv4/fib_frontend.c:195 (discriminator 11))
fib_netdev_event (net/ipv4/fib_frontend.c:1458 net/ipv4/fib_frontend.c:1545)
notifier_call_chain (kernel/notifier.c:85)
dev_close_many (net/core/dev.c:1789)
? __pfx_dev_close_many (net/core/dev.c:1776)
netif_close (./include/linux/list.h:124 ./include/linux/list.h:215
./include/linux/list.h:229 net/core/dev.c:1802 net/core/dev.c:1795)
? __pfx_netif_close (net/core/dev.c:1796)
? mark_held_locks (kernel/locking/lockdep.c:4326)
bnxt_shutdown (drivers/net/ethernet/broadcom/bnxt/bnxt.c:16707) bnxt_en
pci_device_shutdown (drivers/pci/pci-driver.c:511)
device_shutdown (drivers/base/core.c:4820)
kernel_restart (kernel/reboot.c:271 kernel/reboot.c:285)
__do_sys_reboot (kernel/reboot.c:763)
? __pfx___do_sys_reboot (kernel/reboot.c:725)
? rseq_get_rseq_cs (kernel/rseq.c:310)
? rseq_syscall (kernel/rseq.c:465)
? __pfx_rseq_syscall (kernel/rseq.c:458)
? do_writev (fs/read_write.c:1101)
? __pfx_do_writev (fs/read_write.c:1091)
do_syscall_64 (arch/x86/entry/syscall_64.c:63 arch/x86/entry/syscall_64.c:94)
entry_SYSCALL_64_after_hwframe (arch/x86/entry/entry_64.S:130)
RIP: 0033:0x7f7f28830a07
Code: c7 c0 ff ff ff ff eb be 66 2e 0f 1f 84 00 00 00 00 00 90 f3 0f
1e fa 89 fa be 69 19 12 28 bf ad de e1 fe b8 a9 00 00 00 0f 05 <48> 3d
008
All code
========
0: c7 c0 ff ff ff ff mov $0xffffffff,%eax
6: eb be jmp 0xffffffffffffffc6
8: 66 2e 0f 1f 84 00 00 cs nopw 0x0(%rax,%rax,1)
f: 00 00 00
12: 90 nop
13: f3 0f 1e fa endbr64
17: 89 fa mov %edi,%edx
19: be 69 19 12 28 mov $0x28121969,%esi
1e: bf ad de e1 fe mov $0xfee1dead,%edi
23: b8 a9 00 00 00 mov $0xa9,%eax
28: 0f 05 syscall
2a:* 48 rex.W <-- trapping instruction
2b: 3d .byte 0x3d
2c: 08 .byte 0x8
Code starting with the faulting instruction
===========================================
0: 48 rex.W
1: 3d .byte 0x3d
2: 08 .byte 0x8
RSP: 002b:00007ffc65d6b1a8 EFLAGS: 00000246 ORIG_RAX: 00000000000000a9
RAX: ffffffffffffffda RBX: 0000000000000003 RCX: 00007f7f28830a07
RDX: 0000000001234567 RSI: 0000000028121969 RDI: 00000000fee1dead
RBP: 00007ffc65d6b3e0 R08: 0000000000000069 R09: 0000000000000000
R10: 0000000000000000 R11: 0000000000000246 R12: 0000000000000000
R13: 0000000000000000 R14: 0000000000000000 R15: 0000000001234567
</TASK>
------------[ cut here ]------------
RTNL: assertion failed at net/ipv6/addrconf.c (3850)
WARNING: CPU: 0 PID: 1 at net/ipv6/addrconf.c:3850
addrconf_ifdown.isra.0 (net/ipv6/addrconf.c:3850)
Modules linked in: xt_nat xt_tcpudp veth xt_conntrack nft_chain_nat
xt_MASQUERADE nf_conntrack_netlink xfrm_user xt_addrtype nft_compat
nf_tabs
CPU: 0 UID: 0 PID: 1 Comm: shutdown Tainted: G W
6.14.0+ #2 PREEMPT(undef) 271a3d276f79e3bb26d6065917556e94aae0d88d
Tainted: [W]=WARN
Hardware name: ASUS System Product Name/PRIME Z690-P D4, BIOS 0603 11/01/2021
RIP: 0010:addrconf_ifdown.isra.0 (net/ipv6/addrconf.c:3850)
Code: e3 25 ef 08 00 0f 85 49 f0 ff ff ba 0a 0f 00 00 48 c7 c6 80 77
04 a4 48 c7 c7 c0 77 04 a4 c6 05 c3 25 ef 08 01 e8 ab 7b dc fd <0f> 0b
e9f
All code
========
0: e3 25 jrcxz 0x27
2: ef out %eax,(%dx)
3: 08 00 or %al,(%rax)
5: 0f 85 49 f0 ff ff jne 0xfffffffffffff054
b: ba 0a 0f 00 00 mov $0xf0a,%edx
10: 48 c7 c6 80 77 04 a4 mov $0xffffffffa4047780,%rsi
17: 48 c7 c7 c0 77 04 a4 mov $0xffffffffa40477c0,%rdi
1e: c6 05 c3 25 ef 08 01 movb $0x1,0x8ef25c3(%rip) # 0x8ef25e8
25: e8 ab 7b dc fd call 0xfffffffffddc7bd5
2a:* 0f 0b ud2 <-- trapping instruction
2c: 9f lahf
Code starting with the faulting instruction
===========================================
0: 0f 0b ud2
2: 9f lahf
RSP: 0018:ffff888104e2f970 EFLAGS: 00010282
RAX: 0000000000000000 RBX: dffffc0000000000 RCX: 0000000000000000
RDX: 0000000000000002 RSI: 0000000000000004 RDI: 0000000000000001
RBP: ffff888104e2fa90 R08: 0000000000000000 R09: fffffbfff49a4af4
R10: 0000000000000003 R11: 0000000000000001 R12: 0000000000000002
R13: 0000000000000002 R14: ffff888104e2fbc8 R15: ffff888178e24000
FS: 00007f7f27cb4440(0000) GS:ffff88886dc22000(0000) knlGS:0000000000000000
CS: 0010 DS: 0000 ES: 0000 CR0: 0000000080050033
CR2: 00007ffc65d6b0cc CR3: 00000001d73de000 CR4: 00000000007506f0
PKRU: 55555554
Call Trace:
<TASK>
? __warn (kernel/panic.c:748)
? __pfx_vprintk_emit.part.0 (kernel/printk/printk.c:2378)
? addrconf_ifdown.isra.0 (net/ipv6/addrconf.c:3850)
? report_bug (lib/bug.c:201 lib/bug.c:219)
? addrconf_ifdown.isra.0 (net/ipv6/addrconf.c:3850)
? handle_bug (arch/x86/kernel/traps.c:337)
? exc_invalid_op (arch/x86/kernel/traps.c:391 (discriminator 1))
? asm_exc_invalid_op (./arch/x86/include/asm/idtentry.h:578)
? addrconf_ifdown.isra.0 (net/ipv6/addrconf.c:3850)
? find_held_lock (kernel/locking/lockdep.c:5348)
? mark_held_locks (kernel/locking/lockdep.c:4326)
? _raw_spin_unlock_irqrestore (./include/linux/spinlock_api_smp.h:151
kernel/locking/spinlock.c:194)
? __pfx_addrconf_ifdown.isra.0 (net/ipv6/addrconf.c:3839)
? __timer_delete_sync (kernel/time/timer.c:1664)
addrconf_notify (net/ipv6/addrconf.c:3809)
? ip6mr_device_event (net/ipv6/ip6mr.c:1277)
? neigh_ifdown (net/core/neighbour.c:445)
? fib_netdev_event (net/ipv4/fib_frontend.c:1549)
notifier_call_chain (kernel/notifier.c:85)
dev_close_many (net/core/dev.c:1789)
? __pfx_dev_close_many (net/core/dev.c:1776)
netif_close (./include/linux/list.h:124 ./include/linux/list.h:215
./include/linux/list.h:229 net/core/dev.c:1802 net/core/dev.c:1795)
? __pfx_netif_close (net/core/dev.c:1796)
? mark_held_locks (kernel/locking/lockdep.c:4326)
bnxt_shutdown (drivers/net/ethernet/broadcom/bnxt/bnxt.c:16707) bnxt_en
pci_device_shutdown (drivers/pci/pci-driver.c:511)
device_shutdown (drivers/base/core.c:4820)
kernel_restart (kernel/reboot.c:271 kernel/reboot.c:285)
__do_sys_reboot (kernel/reboot.c:763)
? __pfx___do_sys_reboot (kernel/reboot.c:725)
? rseq_get_rseq_cs (kernel/rseq.c:310)
? rseq_syscall (kernel/rseq.c:465)
? __pfx_rseq_syscall (kernel/rseq.c:458)
? do_writev (fs/read_write.c:1101)
? __pfx_do_writev (fs/read_write.c:1091)
do_syscall_64 (arch/x86/entry/syscall_64.c:63 arch/x86/entry/syscall_64.c:94)
entry_SYSCALL_64_after_hwframe (arch/x86/entry/entry_64.S:130)
RIP: 0033:0x7f7f28830a07
Code: c7 c0 ff ff ff ff eb be 66 2e 0f 1f 84 00 00 00 00 00 90 f3 0f
1e fa 89 fa be 69 19 12 28 bf ad de e1 fe b8 a9 00 00 00 0f 05 <48> 3d
008
All code
========
0: c7 c0 ff ff ff ff mov $0xffffffff,%eax
6: eb be jmp 0xffffffffffffffc6
8: 66 2e 0f 1f 84 00 00 cs nopw 0x0(%rax,%rax,1)
f: 00 00 00
12: 90 nop
13: f3 0f 1e fa endbr64
17: 89 fa mov %edi,%edx
19: be 69 19 12 28 mov $0x28121969,%esi
1e: bf ad de e1 fe mov $0xfee1dead,%edi
23: b8 a9 00 00 00 mov $0xa9,%eax
28: 0f 05 syscall
2a:* 48 rex.W <-- trapping instruction
2b: 3d .byte 0x3d
2c: 08 .byte 0x8
Code starting with the faulting instruction
===========================================
0: 48 rex.W
1: 3d .byte 0x3d
2: 08 .byte 0x8
RSP: 002b:00007ffc65d6b1a8 EFLAGS: 00000246 ORIG_RAX: 00000000000000a9
RAX: ffffffffffffffda RBX: 0000000000000003 RCX: 00007f7f28830a07
RDX: 0000000001234567 RSI: 0000000028121969 RDI: 00000000fee1dead
RBP: 00007ffc65d6b3e0 R08: 0000000000000069 R09: 0000000000000000
R10: 0000000000000000 R11: 0000000000000246 R12: 0000000000000000
R13: 0000000000000000 R14: 0000000000000000 R15: 0000000001234567
</TASK>
irq event stamp: 12770237
hardirqs last enabled at (12770249): __up_console_sem
(kernel/printk/printk.c:344 (discriminator 1))
hardirqs last disabled at (12770260): __up_console_sem
(kernel/printk/printk.c:342 (discriminator 1))
softirqs last enabled at (12770118): __irq_exit_rcu
(kernel/softirq.c:596 kernel/softirq.c:435 kernel/softirq.c:662)
softirqs last disabled at (12770113): __irq_exit_rcu
(kernel/softirq.c:596 kernel/softirq.c:435 kernel/softirq.c:662)
---[ end trace 0000000000000000 ]---
------------[ cut here ]------------
RTNL: assertion failed at net/ipv6/addrconf.c (6252)
WARNING: CPU: 0 PID: 1 at net/ipv6/addrconf.c:6252 __ipv6_ifa_notify
(net/ipv6/addrconf.c:6252 (discriminator 3))
Modules linked in: xt_nat xt_tcpudp veth xt_conntrack nft_chain_nat
xt_MASQUERADE nf_conntrack_netlink xfrm_user xt_addrtype nft_compat
nf_tabs
CPU: 0 UID: 0 PID: 1 Comm: shutdown Tainted: G W
6.14.0+ #2 PREEMPT(undef) 271a3d276f79e3bb26d6065917556e94aae0d88d
Tainted: [W]=WARN
Hardware name: ASUS System Product Name/PRIME Z690-P D4, BIOS 0603 11/01/2021
RIP: 0010:__ipv6_ifa_notify (net/ipv6/addrconf.c:6252 (discriminator 3))
Code: b5 fa ff ff ba 6c 18 00 00 48 c7 c6 80 77 04 a4 48 c7 c7 c0 77
04 a4 44 89 a5 28 ff ff ff c6 05 6f e2 ef 08 01 e8 5b 38 dd fd <0f> 0b
8bf
All code
========
0: b5 fa mov $0xfa,%ch
2: ff (bad)
3: ff (bad)
4: ba 6c 18 00 00 mov $0x186c,%edx
9: 48 c7 c6 80 77 04 a4 mov $0xffffffffa4047780,%rsi
10: 48 c7 c7 c0 77 04 a4 mov $0xffffffffa40477c0,%rdi
17: 44 89 a5 28 ff ff ff mov %r12d,-0xd8(%rbp)
1e: c6 05 6f e2 ef 08 01 movb $0x1,0x8efe26f(%rip) # 0x8efe294
25: e8 5b 38 dd fd call 0xfffffffffddd3885
2a:* 0f 0b ud2 <-- trapping instruction
2c: bf .byte 0xbf
Code starting with the faulting instruction
===========================================
0: 0f 0b ud2
2: bf .byte 0xbf
RSP: 0018:ffff888104e2f870 EFLAGS: 00010282
RAX: 0000000000000000 RBX: ffff88815680e800 RCX: 0000000000000000
RDX: 0000000000000002 RSI: 0000000000000004 RDI: 0000000000000001
RBP: ffff888104e2f950 R08: 0000000000000000 R09: fffffbfff49a4af4
R10: 0000000000000003 R11: 0000000000000001 R12: 0000000000000015
R13: 1ffff110209c5f10 R14: ffffffffb0a15f40 R15: ffff88815680e950
FS: 00007f7f27cb4440(0000) GS:ffff88886dc22000(0000) knlGS:0000000000000000
CS: 0010 DS: 0000 ES: 0000 CR0: 0000000080050033
CR2: 00007ffc65d6b0cc CR3: 00000001d73de000 CR4: 00000000007506f0
PKRU: 55555554
Call Trace:
<TASK>
? __warn (kernel/panic.c:748)
? __pfx_vprintk_emit.part.0 (kernel/printk/printk.c:2378)
? __ipv6_ifa_notify (net/ipv6/addrconf.c:6252 (discriminator 3))
? report_bug (lib/bug.c:201 lib/bug.c:219)
? __ipv6_ifa_notify (net/ipv6/addrconf.c:6252 (discriminator 3))
? handle_bug (arch/x86/kernel/traps.c:337)
? exc_invalid_op (arch/x86/kernel/traps.c:391 (discriminator 1))
? asm_exc_invalid_op (./arch/x86/include/asm/idtentry.h:578)
? __ipv6_ifa_notify (net/ipv6/addrconf.c:6252 (discriminator 3))
? __pfx___ipv6_ifa_notify (net/ipv6/addrconf.c:6248)
? lock_acquire (kernel/locking/lockdep.c:472
kernel/locking/lockdep.c:5868 kernel/locking/lockdep.c:5823)
? do_raw_spin_trylock (./arch/x86/include/asm/atomic.h:107
./include/linux/atomic/atomic-arch-fallback.h:2170
./include/linux/atomic/atomic-instrumented.h:1302
./include/asm-generic/qspinlock.h:97
kernel/locking/spinlock_debug.c:123)
? addrconf_ifdown.isra.0 (net/ipv6/addrconf.c:3977)
addrconf_ifdown.isra.0 (net/ipv6/addrconf.c:3977)
? find_held_lock (kernel/locking/lockdep.c:5348)
? __pfx_addrconf_ifdown.isra.0 (net/ipv6/addrconf.c:3839)
? __timer_delete_sync (kernel/time/timer.c:1664)
addrconf_notify (net/ipv6/addrconf.c:3809)
? ip6mr_device_event (net/ipv6/ip6mr.c:1277)
? neigh_ifdown (net/core/neighbour.c:445)
? fib_netdev_event (net/ipv4/fib_frontend.c:1549)
notifier_call_chain (kernel/notifier.c:85)
dev_close_many (net/core/dev.c:1789)
? __pfx_dev_close_many (net/core/dev.c:1776)
netif_close (./include/linux/list.h:124 ./include/linux/list.h:215
./include/linux/list.h:229 net/core/dev.c:1802 net/core/dev.c:1795)
? __pfx_netif_close (net/core/dev.c:1796)
? mark_held_locks (kernel/locking/lockdep.c:4326)
bnxt_shutdown (drivers/net/ethernet/broadcom/bnxt/bnxt.c:16707) bnxt_en
pci_device_shutdown (drivers/pci/pci-driver.c:511)
device_shutdown (drivers/base/core.c:4820)
kernel_restart (kernel/reboot.c:271 kernel/reboot.c:285)
__do_sys_reboot (kernel/reboot.c:763)
? __pfx___do_sys_reboot (kernel/reboot.c:725)
? rseq_get_rseq_cs (kernel/rseq.c:310)
? rseq_syscall (kernel/rseq.c:465)
? __pfx_rseq_syscall (kernel/rseq.c:458)
? do_writev (fs/read_write.c:1101)
? __pfx_do_writev (fs/read_write.c:1091)
do_syscall_64 (arch/x86/entry/syscall_64.c:63 arch/x86/entry/syscall_64.c:94)
entry_SYSCALL_64_after_hwframe (arch/x86/entry/entry_64.S:130)
RIP: 0033:0x7f7f28830a07
Code: c7 c0 ff ff ff ff eb be 66 2e 0f 1f 84 00 00 00 00 00 90 f3 0f
1e fa 89 fa be 69 19 12 28 bf ad de e1 fe b8 a9 00 00 00 0f 05 <48> 3d
008
All code
========
0: c7 c0 ff ff ff ff mov $0xffffffff,%eax
6: eb be jmp 0xffffffffffffffc6
8: 66 2e 0f 1f 84 00 00 cs nopw 0x0(%rax,%rax,1)
f: 00 00 00
12: 90 nop
13: f3 0f 1e fa endbr64
17: 89 fa mov %edi,%edx
19: be 69 19 12 28 mov $0x28121969,%esi
1e: bf ad de e1 fe mov $0xfee1dead,%edi
23: b8 a9 00 00 00 mov $0xa9,%eax
28: 0f 05 syscall
2a:* 48 rex.W <-- trapping instruction
2b: 3d .byte 0x3d
2c: 08 .byte 0x8
Code starting with the faulting instruction
===========================================
0: 48 rex.W
1: 3d .byte 0x3d
2: 08 .byte 0x8
RSP: 002b:00007ffc65d6b1a8 EFLAGS: 00000246 ORIG_RAX: 00000000000000a9
RAX: ffffffffffffffda RBX: 0000000000000003 RCX: 00007f7f28830a07
RDX: 0000000001234567 RSI: 0000000028121969 RDI: 00000000fee1dead
RBP: 00007ffc65d6b3e0 R08: 0000000000000069 R09: 0000000000000000
R10: 0000000000000000 R11: 0000000000000246 R12: 0000000000000000
R13: 0000000000000000 R14: 0000000000000000 R15: 0000000001234567
</TASK>
irq event stamp: 12773159
hardirqs last enabled at (12773171): __up_console_sem
(kernel/printk/printk.c:344 (discriminator 1))
hardirqs last disabled at (12773182): __up_console_sem
(kernel/printk/printk.c:342 (discriminator 1))
softirqs last enabled at (12773004): __irq_exit_rcu
(kernel/softirq.c:596 kernel/softirq.c:435 kernel/softirq.c:662)
softirqs last disabled at (12772999): __irq_exit_rcu
(kernel/softirq.c:596 kernel/softirq.c:435 kernel/softirq.c:662)
---[ end trace 0000000000000000 ]---
------------[ cut here ]------------
RTNL: assertion failed at net/ipv6/mcast.c (1008)
WARNING: CPU: 0 PID: 1 at net/ipv6/mcast.c:1008 __ipv6_dev_mc_dec
(net/ipv6/mcast.c:1008 (discriminator 3))
Modules linked in: xt_nat xt_tcpudp veth xt_conntrack nft_chain_nat
xt_MASQUERADE nf_conntrack_netlink xfrm_user xt_addrtype nft_compat
nf_tabs
CPU: 0 UID: 0 PID: 1 Comm: shutdown Tainted: G W
6.14.0+ #2 PREEMPT(undef) 271a3d276f79e3bb26d6065917556e94aae0d88d
Tainted: [W]=WARN
Hardware name: ASUS System Product Name/PRIME Z690-P D4, BIOS 0603 11/01/2021
RIP: 0010:__ipv6_dev_mc_dec (net/ipv6/mcast.c:1008 (discriminator 3))
Code: 40 b2 e4 08 00 0f 85 d7 fd ff ff ba f0 03 00 00 48 c7 c6 00 58
05 a4 48 c7 c7 60 5d 05 a4 c6 05 20 b2 e4 08 01 e8 f2 07 d2 fd <0f> 0b
e9b
All code
========
0: 40 b2 e4 rex mov $0xe4,%dl
3: 08 00 or %al,(%rax)
5: 0f 85 d7 fd ff ff jne 0xfffffffffffffde2
b: ba f0 03 00 00 mov $0x3f0,%edx
10: 48 c7 c6 00 58 05 a4 mov $0xffffffffa4055800,%rsi
17: 48 c7 c7 60 5d 05 a4 mov $0xffffffffa4055d60,%rdi
1e: c6 05 20 b2 e4 08 01 movb $0x1,0x8e4b220(%rip) # 0x8e4b245
25: e8 f2 07 d2 fd call 0xfffffffffdd2081c
2a:* 0f 0b ud2 <-- trapping instruction
2c: 9b fwait
Code starting with the faulting instruction
===========================================
0: 0f 0b ud2
2: 9b fwait
RSP: 0018:ffff888104e2f818 EFLAGS: 00010292
RAX: 0000000000000000 RBX: ffff888104e2f8e0 RCX: 0000000000000000
RDX: 0000000000000002 RSI: 0000000000000004 RDI: 0000000000000001
RBP: ffff888104e2f950 R08: 0000000000000000 R09: fffffbfff49a4af4
R10: 0000000000000003 R11: 0000000000000001 R12: ffff888144111000
R13: ffff888144111000 R14: ffffffffb0a15f40 R15: ffff88815680e950
FS: 00007f7f27cb4440(0000) GS:ffff88886dc22000(0000) knlGS:0000000000000000
CS: 0010 DS: 0000 ES: 0000 CR0: 0000000080050033
CR2: 00007ffc65d6b0cc CR3: 00000001d73de000 CR4: 00000000007506f0
PKRU: 55555554
Call Trace:
<TASK>
? __warn (kernel/panic.c:748)
? __ipv6_dev_mc_dec (net/ipv6/mcast.c:1008 (discriminator 3))
? report_bug (lib/bug.c:201 lib/bug.c:219)
? __ipv6_dev_mc_dec (net/ipv6/mcast.c:1008 (discriminator 3))
? handle_bug (arch/x86/kernel/traps.c:337)
? exc_invalid_op (arch/x86/kernel/traps.c:391 (discriminator 1))
? asm_exc_invalid_op (./arch/x86/include/asm/idtentry.h:578)
? __ipv6_dev_mc_dec (net/ipv6/mcast.c:1008 (discriminator 3))
? __ipv6_dev_mc_dec (net/ipv6/mcast.c:1008 (discriminator 3))
? nlmsg_notify (net/netlink/af_netlink.c:2578)
__ipv6_ifa_notify (net/ipv6/addrconf.c:2254 net/ipv6/addrconf.c:2246
net/ipv6/addrconf.c:6283)
? __pfx___ipv6_ifa_notify (net/ipv6/addrconf.c:6248)
? do_raw_spin_trylock (./arch/x86/include/asm/atomic.h:107
./include/linux/atomic/atomic-arch-fallback.h:2170
./include/linux/atomic/atomic-instrumented.h:1302
./include/asm-generic/qspinlock.h:97
kernel/locking/spinlock_debug.c:123)
? addrconf_ifdown.isra.0 (net/ipv6/addrconf.c:3977)
addrconf_ifdown.isra.0 (net/ipv6/addrconf.c:3977)
? find_held_lock (kernel/locking/lockdep.c:5348)
? __pfx_addrconf_ifdown.isra.0 (net/ipv6/addrconf.c:3839)
? __timer_delete_sync (kernel/time/timer.c:1664)
addrconf_notify (net/ipv6/addrconf.c:3809)
? ip6mr_device_event (net/ipv6/ip6mr.c:1277)
? neigh_ifdown (net/core/neighbour.c:445)
? fib_netdev_event (net/ipv4/fib_frontend.c:1549)
notifier_call_chain (kernel/notifier.c:85)
dev_close_many (net/core/dev.c:1789)
? __pfx_dev_close_many (net/core/dev.c:1776)
netif_close (./include/linux/list.h:124 ./include/linux/list.h:215
./include/linux/list.h:229 net/core/dev.c:1802 net/core/dev.c:1795)
? __pfx_netif_close (net/core/dev.c:1796)
? mark_held_locks (kernel/locking/lockdep.c:4326)
bnxt_shutdown (drivers/net/ethernet/broadcom/bnxt/bnxt.c:16707) bnxt_en
pci_device_shutdown (drivers/pci/pci-driver.c:511)
device_shutdown (drivers/base/core.c:4820)
kernel_restart (kernel/reboot.c:271 kernel/reboot.c:285)
__do_sys_reboot (kernel/reboot.c:763)
? __pfx___do_sys_reboot (kernel/reboot.c:725)
? rseq_get_rseq_cs (kernel/rseq.c:310)
? rseq_syscall (kernel/rseq.c:465)
? __pfx_rseq_syscall (kernel/rseq.c:458)
? do_writev (fs/read_write.c:1101)
? __pfx_do_writev (fs/read_write.c:1091)
do_syscall_64 (arch/x86/entry/syscall_64.c:63 arch/x86/entry/syscall_64.c:94)
entry_SYSCALL_64_after_hwframe (arch/x86/entry/entry_64.S:130)
RIP: 0033:0x7f7f28830a07
Code: c7 c0 ff ff ff ff eb be 66 2e 0f 1f 84 00 00 00 00 00 90 f3 0f
1e fa 89 fa be 69 19 12 28 bf ad de e1 fe b8 a9 00 00 00 0f 05 <48> 3d
008
All code
========
0: c7 c0 ff ff ff ff mov $0xffffffff,%eax
6: eb be jmp 0xffffffffffffffc6
8: 66 2e 0f 1f 84 00 00 cs nopw 0x0(%rax,%rax,1)
f: 00 00 00
12: 90 nop
13: f3 0f 1e fa endbr64
17: 89 fa mov %edi,%edx
19: be 69 19 12 28 mov $0x28121969,%esi
1e: bf ad de e1 fe mov $0xfee1dead,%edi
23: b8 a9 00 00 00 mov $0xa9,%eax
28: 0f 05 syscall
2a:* 48 rex.W <-- trapping instruction
2b: 3d .byte 0x3d
2c: 08 .byte 0x8
Code starting with the faulting instruction
===========================================
0: 48 rex.W
1: 3d .byte 0x3d
2: 08 .byte 0x8
RSP: 002b:00007ffc65d6b1a8 EFLAGS: 00000246 ORIG_RAX: 00000000000000a9
RAX: ffffffffffffffda RBX: 0000000000000003 RCX: 00007f7f28830a07
RDX: 0000000001234567 RSI: 0000000028121969 RDI: 00000000fee1dead
RBP: 00007ffc65d6b3e0 R08: 0000000000000069 R09: 0000000000000000
R10: 0000000000000000 R11: 0000000000000246 R12: 0000000000000000
R13: 0000000000000000 R14: 0000000000000000 R15: 0000000001234567
</TASK>
irq event stamp: 12774589
hardirqs last enabled at (12774601): __up_console_sem
(kernel/printk/printk.c:344 (discriminator 1))
hardirqs last disabled at (12774612): __up_console_sem
(kernel/printk/printk.c:342 (discriminator 1))
softirqs last enabled at (12774418): __irq_exit_rcu
(kernel/softirq.c:596 kernel/softirq.c:435 kernel/softirq.c:662)
softirqs last disabled at (12774633): __irq_exit_rcu
(kernel/softirq.c:596 kernel/softirq.c:435 kernel/softirq.c:662)
---[ end trace 0000000000000000 ]---
Sorry for the too-long splats.
I didn't see all splats, but I think the cause is only one,
netdev_lock()+netif_close() path. please look at bnxt_shutdown().
The commits 110eff172dfe ("eth: bnxt: switch to netif_close") and
004b5008016a ("eth: bnxt: remove most dependencies on RTNL")
replace rtnl_lock() + dev_close() to netdev_lock() + netif_close().
However, internal functions of netif_close() are still using
rtnl_dereference(). So, there are many RTNL assertions on the
netif_close() path.
Only the bnxt driver uses netif_close(), so other drivers don't have
this problem.
Could you please look into this?
Thanks a lot!
Taehee Yoo
> v2:
> - export netdev_get_by_index_lock
> - new patch: add netdev_lockdep_set_classes to mlx5
> - new patch: exercise notifiers in netdevsim
> - ignore specific locked netdev in call_netdevice_register_notifiers,
> not all
>
> Jakub Kicinski (3):
> net: designate XSK pool pointers in queues as "ops protected"
> netdev: add "ops compat locking" helpers
> netdev: don't hold rtnl_lock over nl queue info get when possible
>
> Stanislav Fomichev (8):
> net: switch to netif_disable_lro in inetdev_init
> net: hold instance lock during NETDEV_REGISTER/UP/UNREGISTER
> net: use netif_disable_lro in ipv6_add_dev
> net: release instance lock during NETDEV_UNREGISTER for bond/team
> net/mlx5e: use netdev_lockdep_set_classes
> netdevsim: add dummy device notifiers
> net: dummy: request ops lock
> docs: net: document netdev notifier expectations
>
> Documentation/networking/netdevices.rst | 18 +++
> drivers/net/bonding/bond_main.c | 2 +
> drivers/net/dummy.c | 1 +
> .../net/ethernet/mellanox/mlx5/core/en_main.c | 2 +
> drivers/net/netdevsim/netdev.c | 58 +++++++++
> drivers/net/netdevsim/netdevsim.h | 3 +
> drivers/net/team/team_core.c | 2 +
> include/linux/netdevice.h | 2 +
> include/net/netdev_lock.h | 16 +++
> include/net/netdev_rx_queue.h | 6 +-
> net/core/dev.c | 117 ++++++++++++++----
> net/core/dev.h | 16 ++-
> net/core/netdev-genl.c | 18 ++-
> net/ipv4/devinet.c | 2 +-
> net/ipv6/addrconf.c | 17 ++-
> net/xdp/xsk_buff_pool.c | 7 +-
> 16 files changed, 245 insertions(+), 42 deletions(-)
>
> --
> 2.48.1
>
>
^ permalink raw reply [flat|nested] 38+ messages in thread
* Re: [PATCH net v2 01/11] net: switch to netif_disable_lro in inetdev_init
2025-03-27 21:36 ` Jakub Kicinski
@ 2025-03-28 15:01 ` Stanislav Fomichev
0 siblings, 0 replies; 38+ messages in thread
From: Stanislav Fomichev @ 2025-03-28 15:01 UTC (permalink / raw)
To: Jakub Kicinski
Cc: Stanislav Fomichev, netdev, davem, edumazet, pabeni, Cosmin Ratiu
On 03/27, Jakub Kicinski wrote:
> On Thu, 27 Mar 2025 14:09:07 -0700 Stanislav Fomichev wrote:
> > On 03/27, Jakub Kicinski wrote:
> > > On Thu, 27 Mar 2025 06:56:49 -0700 Stanislav Fomichev wrote:
> > > > +EXPORT_SYMBOL(netif_disable_lro);
> > >
> > > Actually EXPORT_IPV6_MOD() would do here, no?
> > > We only need this export for V6?
> >
> > This patch is touching v4 net/ipv4/devinet.c, so both :-(
>
> IPv4 can't be a module tho, we're talking about an export..
Ah, that's true!
^ permalink raw reply [flat|nested] 38+ messages in thread
* Re: [PATCH net v2 03/11] net: use netif_disable_lro in ipv6_add_dev
2025-03-27 21:37 ` Jakub Kicinski
@ 2025-03-28 15:01 ` Stanislav Fomichev
0 siblings, 0 replies; 38+ messages in thread
From: Stanislav Fomichev @ 2025-03-28 15:01 UTC (permalink / raw)
To: Jakub Kicinski
Cc: Stanislav Fomichev, netdev, davem, edumazet, pabeni, Cosmin Ratiu
On 03/27, Jakub Kicinski wrote:
> On Thu, 27 Mar 2025 14:06:43 -0700 Stanislav Fomichev wrote:
> > On 03/27, Jakub Kicinski wrote:
> > > On Thu, 27 Mar 2025 06:56:51 -0700 Stanislav Fomichev wrote:
> > > > @@ -3151,11 +3153,12 @@ int addrconf_add_ifaddr(struct net *net, void __user *arg)
> > > > cfg.plen = ireq.ifr6_prefixlen;
> > > >
> > > > rtnl_net_lock(net);
> > > > - dev = __dev_get_by_index(net, ireq.ifr6_ifindex);
> > > > + dev = netdev_get_by_index_lock(net, ireq.ifr6_ifindex);
> > >
> > > I think you want ops locking here, no?
> > > netdev_get_by_index_lock() will also lock devs which didn't opt in.
> >
> > New netdev_get_by_index_lock_ops? I felt like we already have too many
> > xxxdev_get_by, but agreed that it should be safer, will do!
>
> I think we're holding rtnl_lock here, so we don't need an
> "atomic get and lock", we can stick to __dev_get_by_index()
> and then lock it separately?
Sounds good, that should do it, thanks!
^ permalink raw reply [flat|nested] 38+ messages in thread
* Re: [PATCH net v2 08/11] docs: net: document netdev notifier expectations
2025-03-27 21:50 ` Jakub Kicinski
@ 2025-03-28 15:03 ` Stanislav Fomichev
0 siblings, 0 replies; 38+ messages in thread
From: Stanislav Fomichev @ 2025-03-28 15:03 UTC (permalink / raw)
To: Jakub Kicinski; +Cc: Stanislav Fomichev, netdev, davem, edumazet, pabeni
On 03/27, Jakub Kicinski wrote:
> On Thu, 27 Mar 2025 13:57:01 -0700 Stanislav Fomichev wrote:
> > That sounds very sensible, let me try it out and run the tests.
> > I'll have to drop the lock twice, once for NETDEV_UNREGISTER
> > and another time for move_netdevice_notifiers_dev_net, but since
> > the device is unlisted, nothing should touch it (in theory)?
>
> Yup, and/or we can adjust if we find a reason to, I don't think
> the ordering of the actions in netns changes is precisely intentional.
>
> > netif_change_net_namespace is already the first thing that happens
> > in do_setlink, so I won't be converting it to dev_xxx (lmk if I
> > miss something here).
>
> I thought you could move it outside the lock in do_setlink()
> and have [netif -> dev]_change_net_namespace take the lock.
> Dropping and taking the lock in a callee is a bit bad, so
> I'd prefer if the netif_ / "I want to switch netns but I'm already
> holding the lock" version of _change_net_namespace didn't exist
> at all.
Looks like I also accidentally killed extack argument of
netif_change_net_namespace (by always passing NULL). Will bring
__dev_change_net_namespace, with proper locking and extack and will
call it before grabbing a lock in the do_setlink as you suggest (with
proper locking inside).
^ permalink raw reply [flat|nested] 38+ messages in thread
* Re: [PATCH net v2 06/11] netdevsim: add dummy device notifiers
2025-03-27 21:46 ` Jakub Kicinski
2025-03-28 6:03 ` Kuniyuki Iwashima
@ 2025-03-28 15:04 ` Stanislav Fomichev
1 sibling, 0 replies; 38+ messages in thread
From: Stanislav Fomichev @ 2025-03-28 15:04 UTC (permalink / raw)
To: Jakub Kicinski; +Cc: Stanislav Fomichev, netdev, davem, edumazet, pabeni
On 03/27, Jakub Kicinski wrote:
> On Thu, 27 Mar 2025 14:04:06 -0700 Stanislav Fomichev wrote:
> > > Can we register empty notifiers in nsim (just to make sure it has
> > > a callback) but do the validation in rtnl_net_debug.c
> > > I guess we'd need to transform rtnl_net_debug.c a little,
> > > make it less rtnl specific, compile under DEBUG_NET and ifdef
> > > out the small rtnl parts?
> >
> > s/rtnl_net_debug.c/notifiers_debug.c/ + DEBUG_NET? Or I can keep the
> > name and only do the DEBUG_NET part.
>
> I was thinking lock or locking as in net/core/lock_debug.c
> But yeah, it's locking in notifier locking, maybe
> net/core/notifier_lock_debug.c then? No strong feelings.
>
> > Not sure what needs to be ifdef-ed out,
> > but will take a look (probably just enough to make it compile with
> > !CONFIG_DEBUG_NET_SMALL_RTNL ?).
>
> You're right, looking at the code we need all of it.
> Somehow I thought its doing extra netns related stuff but it just
> register a notifier in each ns.
> I guess we may not need any ifdef at all.
>
> > That should work for the regular notifiers,
> > but I think register_netdevice_notifier_dev_net needs a netdev?
>
> Hm. Yes. Not sure if we need anything extra in the notifier for nsim
> or we just want to make make sure it registers one. If the latter
> I guess we could export rtnl_net_debug_event (modulo rename) and
> call it from netdevsim? I mean - we would probably have the same
> exact asserts in both?
SG, reusing the notifier handler makes sense, will do!
^ permalink raw reply [flat|nested] 38+ messages in thread
* Re: [PATCH net v2 06/11] netdevsim: add dummy device notifiers
2025-03-28 6:03 ` Kuniyuki Iwashima
@ 2025-03-28 15:07 ` Stanislav Fomichev
0 siblings, 0 replies; 38+ messages in thread
From: Stanislav Fomichev @ 2025-03-28 15:07 UTC (permalink / raw)
To: Kuniyuki Iwashima; +Cc: kuba, davem, edumazet, netdev, pabeni, sdf
On 03/27, Kuniyuki Iwashima wrote:
> From: Jakub Kicinski <kuba@kernel.org>
> Date: Thu, 27 Mar 2025 14:46:09 -0700
> > On Thu, 27 Mar 2025 14:04:06 -0700 Stanislav Fomichev wrote:
> > > > Can we register empty notifiers in nsim (just to make sure it has
> > > > a callback) but do the validation in rtnl_net_debug.c
> > > > I guess we'd need to transform rtnl_net_debug.c a little,
> > > > make it less rtnl specific, compile under DEBUG_NET and ifdef
> > > > out the small rtnl parts?
> > >
> > > s/rtnl_net_debug.c/notifiers_debug.c/ + DEBUG_NET? Or I can keep the
> > > name and only do the DEBUG_NET part.
> >
> > I was thinking lock or locking as in net/core/lock_debug.c
>
> Maybe lock.c (or netdev_lock.c like netdev_lock.h) and move all
> locking stuff (netdev_lock_type[], netdev_lock_pos(), etc) there
> later + ifdef where necessary ?
That might work as well, but will require move moving. Maybe I can
start with s/rtnl_net_debug.c/lock.c/ and the we can move the other
stuff separately?
^ permalink raw reply [flat|nested] 38+ messages in thread
* Re: [PATCH net v2 00/11] net: hold instance lock during NETDEV_UP/REGISTER/UNREGISTER
2025-03-28 8:07 ` [PATCH net v2 00/11] net: hold instance lock during NETDEV_UP/REGISTER/UNREGISTER Taehee Yoo
@ 2025-03-28 15:43 ` Stanislav Fomichev
0 siblings, 0 replies; 38+ messages in thread
From: Stanislav Fomichev @ 2025-03-28 15:43 UTC (permalink / raw)
To: Taehee Yoo; +Cc: Stanislav Fomichev, netdev, davem, edumazet, kuba, pabeni
On 03/28, Taehee Yoo wrote:
> On Thu, Mar 27, 2025 at 10:57 PM Stanislav Fomichev <sdf@fomichev.me> wrote:
> >
>
> Hi Stanislav,
> Thanks a lot for the patch!
>
> > Solving the issue reported by Cosmin in [0] requires consistent
> > lock during NETDEV_UP/REGISTER/UNREGISTER notifiers. This series
> > addresses that (along with some other fixes in net/ipv4/devinet.c
> > and net/ipv6/addrconf.c) and appends the patches from Jakub
> > that were conditional on locked NETDEV_UNREGISTER.
> >
> > 0: https://lore.kernel.org/netdev/700fa36b94cbd57cfea2622029b087643c80cbc9.camel@nvidia.com/
> >
>
> I tested it using netdevsim/veth and my Broadcom NIC.
> It appears that netdevsim/veth has no issues, but I encountered many
> RTNL assertions in the bnxt driver.
>
> Reproducer:
> interface=<bnxt interface>
> ip a a 10.0.0.1/24 dev $interface
> ip a a 2001:db8::1/64 dev $interface
> ip link set $interface up
> reboot
Ok, so, reboot triggers pci_driver.shutdown which triggers inetdev_event
which asserts rtnl. Looks like I need to bring rtnl_lock back here.
^ permalink raw reply [flat|nested] 38+ messages in thread
* Re: [PATCH net v2 05/11] net/mlx5e: use netdev_lockdep_set_classes
2025-03-27 21:05 ` Stanislav Fomichev
@ 2025-03-31 8:01 ` Cosmin Ratiu
0 siblings, 0 replies; 38+ messages in thread
From: Cosmin Ratiu @ 2025-03-31 8:01 UTC (permalink / raw)
To: stfomichev@gmail.com, kuba@kernel.org
Cc: edumazet@google.com, netdev@vger.kernel.org, davem@davemloft.net,
sdf@fomichev.me, pabeni@redhat.com
On Thu, 2025-03-27 at 14:05 -0700, Stanislav Fomichev wrote:
> On 03/27, Jakub Kicinski wrote:
> > On Thu, 27 Mar 2025 06:56:53 -0700 Stanislav Fomichev wrote:
> > > Cosmin reports a potential recursive lock warning in [0]. mlx5 is
> > > using register_netdevice_notifier_dev_net which might result in
> > > iteration over entire netns which triggers lock ordering issues.
> > > We know that lower devices are independent, so it's save to
> > > suppress the lockdep.
> >
> > But mlx5 does not use instance locking, yet, so lets defer this
> > one?
>
> SG! Maybe the mlx folks can have it as part of their queue mgmt work?
> Cosmin are you ok with adding this to your patch series?
I'll add it to my pending series, thanks!
Cosmin.
^ permalink raw reply [flat|nested] 38+ messages in thread
end of thread, other threads:[~2025-03-31 8:01 UTC | newest]
Thread overview: 38+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2025-03-27 13:56 [PATCH net v2 00/11] net: hold instance lock during NETDEV_UP/REGISTER/UNREGISTER Stanislav Fomichev
2025-03-27 13:56 ` [PATCH net v2 01/11] net: switch to netif_disable_lro in inetdev_init Stanislav Fomichev
2025-03-27 18:40 ` Jakub Kicinski
2025-03-27 18:59 ` Jakub Kicinski
2025-03-27 21:09 ` Stanislav Fomichev
2025-03-27 21:36 ` Jakub Kicinski
2025-03-28 15:01 ` Stanislav Fomichev
2025-03-27 13:56 ` [PATCH net v2 02/11] net: hold instance lock during NETDEV_REGISTER/UP/UNREGISTER Stanislav Fomichev
2025-03-27 18:58 ` Jakub Kicinski
2025-03-27 13:56 ` [PATCH net v2 03/11] net: use netif_disable_lro in ipv6_add_dev Stanislav Fomichev
2025-03-27 19:02 ` Jakub Kicinski
2025-03-27 21:06 ` Stanislav Fomichev
2025-03-27 21:37 ` Jakub Kicinski
2025-03-28 15:01 ` Stanislav Fomichev
2025-03-27 13:56 ` [PATCH net v2 04/11] net: release instance lock during NETDEV_UNREGISTER for bond/team Stanislav Fomichev
2025-03-27 13:56 ` [PATCH net v2 05/11] net/mlx5e: use netdev_lockdep_set_classes Stanislav Fomichev
2025-03-27 19:08 ` Jakub Kicinski
2025-03-27 21:05 ` Stanislav Fomichev
2025-03-31 8:01 ` Cosmin Ratiu
2025-03-27 13:56 ` [PATCH net v2 06/11] netdevsim: add dummy device notifiers Stanislav Fomichev
2025-03-27 19:12 ` Jakub Kicinski
2025-03-27 21:04 ` Stanislav Fomichev
2025-03-27 21:46 ` Jakub Kicinski
2025-03-28 6:03 ` Kuniyuki Iwashima
2025-03-28 15:07 ` Stanislav Fomichev
2025-03-28 15:04 ` Stanislav Fomichev
2025-03-27 13:56 ` [PATCH net v2 07/11] net: dummy: request ops lock Stanislav Fomichev
2025-03-27 13:56 ` [PATCH net v2 08/11] docs: net: document netdev notifier expectations Stanislav Fomichev
2025-03-27 19:16 ` Jakub Kicinski
2025-03-27 19:34 ` Jakub Kicinski
2025-03-27 20:57 ` Stanislav Fomichev
2025-03-27 21:50 ` Jakub Kicinski
2025-03-28 15:03 ` Stanislav Fomichev
2025-03-27 13:56 ` [PATCH net v2 09/11] net: designate XSK pool pointers in queues as "ops protected" Stanislav Fomichev
2025-03-27 13:56 ` [PATCH net v2 10/11] netdev: add "ops compat locking" helpers Stanislav Fomichev
2025-03-27 13:56 ` [PATCH net v2 11/11] netdev: don't hold rtnl_lock over nl queue info get when possible Stanislav Fomichev
2025-03-28 8:07 ` [PATCH net v2 00/11] net: hold instance lock during NETDEV_UP/REGISTER/UNREGISTER Taehee Yoo
2025-03-28 15:43 ` Stanislav Fomichev
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).