linux/net/ethtool
Jakub Kicinski 00d0f31a1e net: ethtool: coalesce: try to make user settings stick twice
SET_COALESCE may change operation mode and parameters in one call.
Changing operation mode may cause the driver to reset the parameter
values to what is a reasonable default for new operation mode.

Since driver does not know which parameters come from user and which
are echoed back from ->get, driver may ignore the parameters when
switching operation modes.

This used to be inevitable for ioctl() but in netlink we know which
parameters are actually specified by the user.

We could inform which parameters were set by the user but this would
lead to a lot of code duplication in the drivers. Instead try to call
the drivers twice if both mode and params are changed. The set method
already checks if any params need updating so in case the driver did
the right thing the first time around - there will be no second call
to it's ->set method (only an extra call to ->get()).

For mlx5 for example before this patch we'd see:

 # ethtool -C eth0 adaptive-rx on  adaptive-tx on
 # ethtool -C eth0 adaptive-rx off adaptive-tx off \
		   tx-usecs 123 rx-usecs 123
 Adaptive RX: off  TX: off
 rx-usecs: 3
 rx-frames: 32
 tx-usecs: 16
 tx-frames: 32
 [...]

After the change:

 # ethtool -C eth0 adaptive-rx on  adaptive-tx on
 # ethtool -C eth0 adaptive-rx off adaptive-tx off \
		   tx-usecs 123 rx-usecs 123
 Adaptive RX: off  TX: off
 rx-usecs: 123
 rx-frames: 32
 tx-usecs: 123
 tx-frames: 32
 [...]

This only works for netlink, so it's a small discrepancy between
netlink and ioctl(). Since we anticipate most users to move to
netlink I believe it's worth making their lives easier.

Link: https://lore.kernel.org/r/20230420233302.944382-1-kuba@kernel.org
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
2023-04-24 18:09:49 -07:00
..
bitset.c ethtool: fix stack overflow in ethnl_parse_bitset() 2020-12-09 15:50:38 -08: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: convert commands to common SET 2023-01-27 12:24:32 +00:00
coalesce.c net: ethtool: coalesce: try to make user settings stick twice 2023-04-24 18:09:49 -07:00
common.c drivers/net/phy: add the link modes for the 10BASE-T1S Ethernet PHY 2023-01-11 08:35:02 +00:00
common.h net: ethtool: netlink: retrieve stats from multiple sources (eMAC, pMAC) 2023-01-23 12:44:18 +00:00
debug.c ethtool: netlink: convert commands to common SET 2023-01-27 12:24:32 +00:00
eee.c ethtool: netlink: convert commands to common SET 2023-01-27 12:24:32 +00:00
eeprom.c ethtool: eeprom: fix null-deref on genl_info in dump 2022-10-24 19:08:07 -07:00
features.c ethtool: use ethnl_parse_header_dev_put() 2021-12-15 10:27:47 +00:00
fec.c ethtool: netlink: convert commands to common SET 2023-01-27 12:24:32 +00:00
ioctl.c ipv6: Remove in6addr_any alternatives. 2023-03-29 08:22:52 +01:00
linkinfo.c ethtool: netlink: convert commands to common SET 2023-01-27 12:24:32 +00:00
linkmodes.c ethtool: reset #lanes when lanes is omitted 2023-04-04 18:57:10 -07:00
linkstate.c ethtool: linkstate: add a statistic for PHY down events 2022-11-08 10:36:54 +01:00
Makefile net: ethtool: add support for MAC Merge layer 2023-01-23 12:44:18 +00:00
mm.c net: ethtool: mm: sanitize some UAPI configurations 2023-04-20 20:03:21 -07:00
module.c ethtool: netlink: convert commands to common SET 2023-01-27 12:24:32 +00:00
netlink.c ethtool: netlink: convert commands to common SET 2023-01-27 12:24:32 +00:00
netlink.h ethtool: Add support for configuring tx_push_buf_len 2023-03-27 19:49:58 -07:00
pause.c ethtool: netlink: handle SET intro/outro in the common code 2023-01-27 12:24:31 +00:00
phc_vclocks.c ethtool: add a new command for getting PHC virtual clocks 2021-07-01 13:08:18 -07:00
plca.c ethtool: netlink: convert commands to common SET 2023-01-27 12:24:32 +00:00
privflags.c ethtool: netlink: convert commands to common SET 2023-01-27 12:24:32 +00:00
pse-pd.c ethtool: pse-pd: Fix double word in comments 2023-02-21 09:02:13 -08:00
rings.c ethtool: Add support for configuring tx_push_buf_len 2023-03-27 19:49:58 -07:00
rss.c ethtool: add netlink attr in rss get reply only if value is not null 2023-01-12 21:52:46 -08:00
stats.c net: ethtool: fix NULL pointer dereference in stats_prepare_data() 2023-01-25 09:56:31 +00:00
strset.c ethtool: strset: report missing ETHTOOL_A_STRINGSET_ID via ext_ack 2022-08-30 12:20:43 +02:00
tsinfo.c ethtool: link up ethnl_header_policy as a nested policy 2020-10-06 06:25:55 -07:00
tunnels.c ethtool: tunnels: check the return value of nla_nest_start() 2022-09-22 19:28:10 -07:00
wol.c ethtool: netlink: convert commands to common SET 2023-01-27 12:24:32 +00:00