linux/net/ethtool
Johannes Berg facd15dfd6 net: core: synchronize link-watch when carrier is queried
There are multiple ways to query for the carrier state: through
rtnetlink, sysfs, and (possibly) ethtool. Synchronize linkwatch
work before these operations so that we don't have a situation
where userspace queries the carrier state between the driver's
carrier off->on transition and linkwatch running and expects it
to work, when really (at least) TX cannot work until linkwatch
has run.

I previously posted a longer explanation of how this applies to
wireless [1] but with this wireless can simply query the state
before sending data, to ensure the kernel is ready for it.

[1] https://lore.kernel.org/all/346b21d87c69f817ea3c37caceb34f1f56255884.camel@sipsolutions.net/

Signed-off-by: Johannes Berg <johannes.berg@intel.com>
Reviewed-by: Jiri Pirko <jiri@nvidia.com>
Link: https://lore.kernel.org/r/20231204214706.303c62768415.I1caedccae72ee5a45c9085c5eb49c145ce1c0dd5@changeid
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
2023-12-05 20:16:45 -08:00
..
bitset.c Revert "ethtool: Fix mod state of verbose no_mask bitset" 2023-10-19 09:27:12 -07:00
bitset.h ethtool: add ethnl_parse_bitset() helper 2020-03-12 15:32:32 -07:00
cabletest.c net: delete extra space and tab in blank line 2022-07-25 19:38:31 -07:00
channels.c ethtool: netlink: always pass genl_info to .prepare_data 2023-08-15 15:01:03 -07:00
coalesce.c ethtool: netlink: always pass genl_info to .prepare_data 2023-08-15 15:01:03 -07:00
common.c net: partial revert of the "Make timestamping selectable: series 2023-11-18 18:42:37 -08:00
common.h net: partial revert of the "Make timestamping selectable: series 2023-11-18 18:42:37 -08:00
debug.c ethtool: netlink: always pass genl_info to .prepare_data 2023-08-15 15:01:03 -07:00
eee.c ethtool: netlink: always pass genl_info to .prepare_data 2023-08-15 15:01:03 -07:00
eeprom.c ethtool: netlink: always pass genl_info to .prepare_data 2023-08-15 15:01:03 -07:00
features.c ethtool: netlink: always pass genl_info to .prepare_data 2023-08-15 15:01:03 -07:00
fec.c ethtool: netlink: always pass genl_info to .prepare_data 2023-08-15 15:01:03 -07:00
ioctl.c net: core: synchronize link-watch when carrier is queried 2023-12-05 20:16:45 -08:00
linkinfo.c ethtool: netlink: always pass genl_info to .prepare_data 2023-08-15 15:01:03 -07:00
linkmodes.c ethtool: netlink: always pass genl_info to .prepare_data 2023-08-15 15:01:03 -07:00
linkstate.c ethtool: netlink: always pass genl_info to .prepare_data 2023-08-15 15:01:03 -07:00
Makefile net: partial revert of the "Make timestamping selectable: series 2023-11-18 18:42:37 -08:00
mm.c ethtool: netlink: always pass genl_info to .prepare_data 2023-08-15 15:01:03 -07:00
module.c ethtool: netlink: always pass genl_info to .prepare_data 2023-08-15 15:01:03 -07:00
netlink.c ethtool: don't propagate EOPNOTSUPP from dumps 2023-11-29 08:43:27 -08:00
netlink.h net: partial revert of the "Make timestamping selectable: series 2023-11-18 18:42:37 -08:00
pause.c ethtool: netlink: always pass genl_info to .prepare_data 2023-08-15 15:01:03 -07:00
phc_vclocks.c ethtool: netlink: always pass genl_info to .prepare_data 2023-08-15 15:01:03 -07:00
plca.c ethtool: plca: fix plca enable data type while parsing the value 2023-10-03 07:18:58 -07:00
privflags.c ethtool: netlink: always pass genl_info to .prepare_data 2023-08-15 15:01:03 -07:00
pse-pd.c ethtool: netlink: always pass genl_info to .prepare_data 2023-08-15 15:01:03 -07:00
rings.c ethtool: netlink: always pass genl_info to .prepare_data 2023-08-15 15:01:03 -07:00
rss.c ethtool: netlink: always pass genl_info to .prepare_data 2023-08-15 15:01:03 -07:00
stats.c ethtool: netlink: always pass genl_info to .prepare_data 2023-08-15 15:01:03 -07:00
strset.c ethtool: netlink: always pass genl_info to .prepare_data 2023-08-15 15:01:03 -07:00
tsinfo.c ethtool: netlink: always pass genl_info to .prepare_data 2023-08-15 15:01:03 -07:00
tunnels.c genetlink: use attrs from struct genl_info 2023-08-15 15:00:45 -07:00
wol.c ethtool: netlink: always pass genl_info to .prepare_data 2023-08-15 15:01:03 -07:00