linux/net/ethtool
Jakub Kicinski f994752b11 net: ethtool: optionally skip rtnl_lock on IOCTL path
Convert the IOCTL path similarly to how we converted Netlink.
The device lookup gets a little hairy. We could take rtnl_lock
unconditionally and drop it before calling the driver (this would
avoid the reference + liveness check). But I think being able
to make progress even if rtnl is dead-locked is quite useful.

First extra concern is handling features. List all the cmds which
modify features and always take rtnl_lock. We could fold this list
into ethtool_ioctl_needs_rtnl() but seems cleaner to keep
ethtool_ioctl_needs_rtnl() driver-related. If a driver changed
features and we were not holding rtnl_lock - warn about it.
It can only happen on buggy ops locked drivers (buggy because
they should have set appropriate "I need rtnl for op X" bit).

Second wrinkle is the PHY ID hack which drops the locks while
sleeping. Convert its static "busy" variable which used to
be protected by rtnl_lock to a field in struct ethtool_netdev_state.
This feature is about identifying an adapter or a port within
a system, so being able to blink multiple LEDs at the same
time is likely not very useful in practice. But it's the simplest
fix, we can add a mutex if someone thinks a system should only
be ID'ing one port at a time.

Reviewed-by: Eric Dumazet <edumazet@google.com>
Acked-by: Stanislav Fomichev <sdf@fomichev.me>
Reviewed-by: Jacob Keller <jacob.e.keller@intel.com>
Link: https://patch.msgid.link/20260605002912.3456868-12-kuba@kernel.org
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
2026-06-09 10:13:06 -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 ethtool: Add RSS indirection table resize helpers 2026-03-23 17:59:54 -07:00
common.h net: ethtool: optionally skip rtnl_lock on Netlink path for SET ops 2026-06-09 10:13:05 -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: optionally skip rtnl_lock on IOCTL path 2026-06-09 10:13:06 -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