linux/net/ethtool
Jakub Kicinski 1105ef941c net: ethtool: keep rtnl_lock for ops using ethtool_op_get_link()
Breno reports following splats on mlx5:

  RTNL: assertion failed at net/core/dev.c (2241)
  WARNING: net/core/dev.c:2241 at netif_state_change+0xed/0x130, CPU#5: ethtool/1335
  RIP: 0010:netif_state_change+0xf9/0x130
  Call Trace:
    <TASK>
     __linkwatch_sync_dev+0xea/0x120
     ethtool_op_get_link+0xe/0x20
     __ethtool_get_link+0x26/0x40
     linkstate_prepare_data+0x51/0x200
     ethnl_default_doit+0x213/0x470
     genl_family_rcv_msg_doit+0xdd/0x110

Looks like I missed ethtool_op_get_link() trying to sync linkwatch,
which needs rtnl_lock. Not all drivers do this - bnxt doesn't,
it just returns the link state, so add an opt-in bit.

Reported-by: Breno Leitao <leitao@debian.org>
Fixes: 45079e0013 ("net: ethtool: optionally skip rtnl_lock on Netlink path for GET ops")
Acked-by: Stanislav Fomichev <sdf@fomichev.me>
Reviewed-by: Breno Leitao <leitao@debian.org>
Acked-by: Harshitha Ramamurthy <hramamurthy@google.com>
Link: https://patch.msgid.link/20260624190439.2521219-1-kuba@kernel.org
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
2026-06-25 10:18:34 -07:00
..
bitset.c ethtool: fix ethnl_bitmap32_not_zero() bit interval semantics 2026-05-12 18:45:13 -07:00
bitset.h net: ethtool: re-order local includes 2026-03-20 19:10:18 -07:00
cabletest.c net: ethtool: optionally skip rtnl_lock in cable test handlers 2026-06-09 10:13:05 -07:00
channels.c net, ethtool: Disallow leased real rxqs to be resized 2026-04-09 18:21:46 -07:00
cmis_cdb.c net: ethtool: cmis_cdb: hold instance lock for ops locked devices 2026-06-04 14:04:55 -07:00
cmis_fw_update.c net: ethtool: cmis_cdb: hold instance lock for ops locked devices 2026-06-04 14:04:55 -07:00
cmis.h ethtool: cmis: fix u16-to-u8 truncation of msleep_pre_rpl 2026-05-26 08:19:33 -07:00
coalesce.c ethtool: coalesce: cap profile updates at NET_DIM_PARAMS_NUM_PROFILES 2026-05-27 17:42:07 -07:00
common.c tls: remove tls_toe and the related driver 2026-06-12 16:43:10 -07:00
common.h net: ethtool: keep rtnl_lock for ops using ethtool_op_get_link() 2026-06-25 10:18:34 -07:00
debug.c net: ethtool: re-order local includes 2026-03-20 19:10:18 -07:00
eee.c net: ethtool: re-order local includes 2026-03-20 19:10:18 -07:00
eeprom.c ethtool: eeprom: add more safeties to EEPROM Netlink fallback 2026-05-27 17:42:09 -07:00
features.c net: ethtool: re-order local includes 2026-03-20 19:10:18 -07:00
fec.c net: ethtool: re-order local includes 2026-03-20 19:10:18 -07:00
ioctl.c net: ethtool: add KSZ87xx low-loss cable PHY tunables 2026-06-11 15:47:56 -07:00
linkinfo.c net: ethtool: add netif_get_link_ksettings() for correct ops-locked use 2026-06-04 14:04:55 -07:00
linkmodes.c net: ethtool: add netif_get_link_ksettings() for correct ops-locked use 2026-06-04 14:04:55 -07:00
linkstate.c ethtool: linkstate: fix unbalanced ethnl_ops_complete() on PHY lookup error 2026-05-27 17:42:08 -07:00
Makefile ethtool: netlink: add ETHTOOL_MSG_MSE_GET and wire up PHY MSE access 2025-11-03 18:32:27 -08:00
mm.c net: ethtool: optionally skip rtnl_lock on Netlink path for GET ops 2026-06-09 10:13:04 -07:00
module_fw.h ethtool: Add ability to flash transceiver modules' firmware 2024-06-28 10:48:23 +01:00
module.c net: ethtool: optionally skip rtnl_lock in ethnl_act_module_fw_flash() 2026-06-09 10:13:05 -07:00
mse.c net: ethtool: re-order local includes 2026-03-20 19:10:18 -07:00
netlink.c net: ethtool: optionally skip rtnl_lock on Netlink path for SET ops 2026-06-09 10:13:05 -07:00
netlink.h net: ethtool: relax ethnl_req_get_phydev() locking assertion 2026-06-09 10:13:04 -07:00
pause.c net: ethtool: pass genl_info to the ethnl parse_request operation 2026-03-24 20:14:29 -07:00
phc_vclocks.c net: ethtool: re-order local includes 2026-03-20 19:10:18 -07:00
phy.c net: ethtool: relax ethnl_req_get_phydev() locking assertion 2026-06-09 10:13:04 -07:00
plca.c net: ethtool: re-order local includes 2026-03-20 19:10:18 -07:00
privflags.c net: ethtool: re-order local includes 2026-03-20 19:10:18 -07:00
pse-pd.c ethtool: pse-pd: fix missing ethnl_ops_complete() 2026-05-27 17:42:08 -07:00
rings.c net: ethtool: fix missing closing paren in rings_reply_size() 2026-05-11 18:42:25 -07:00
rss.c net: ethtool: optionally skip rtnl_lock in RSS context handlers 2026-06-09 10:13:05 -07:00
stats.c net: ethtool: pass genl_info to the ethnl parse_request operation 2026-03-24 20:14:29 -07:00
strset.c ethtool: strset: fix header attribute index in ethnl_req_get_phydev() 2026-05-27 17:42:09 -07:00
ts.h net: ethtool: tsinfo: Enhance tsinfo to support several hwtstamp by net topology 2024-12-16 12:51:41 +00:00
tsconfig.c net: ethtool: make dev->hwprov ops-protected 2026-06-09 10:13:04 -07:00
tsinfo.c net: ethtool: optionally skip rtnl_lock in ethnl_tsinfo_dumpit() 2026-06-09 10:13:05 -07:00
tunnels.c genetlink: use attrs from struct genl_info 2023-08-15 15:00:45 -07:00
wol.c net: ethtool: re-order local includes 2026-03-20 19:10:18 -07:00