mirror_ubuntu-kernels/drivers/net/ethernet/amazon/ena
Arthur Kiyanovski 41c53caa5a net: ena: fix issues in setting interrupt moderation params in ethtool
Issue 1:
--------
Reproduction steps:
1. sudo ethtool -C eth0 rx-usecs 128
2. sudo ethtool -C eth0 adaptive-rx on
3. sudo ethtool -C eth0 adaptive-rx off
4. ethtool -c eth0

expected output: rx-usecs 128
actual output: rx-usecs 0

Reason for issue:
In stage 3, ethtool userspace calls first the ena_get_coalesce() handler
to get the current value of all properties, and then the ena_set_coalesce()
handler. When ena_get_coalesce() is called the adaptive interrupt
moderation is still on. There is an if in the code that returns the
rx_coalesce_usecs only if the adaptive interrupt moderation is off.
And since it is still on, rx_coalesce_usecs is not set, meaning it
stays 0.

Solution to issue:
Remove this if static interrupt moderation intervals have nothing to do
with dynamic ones.

Issue 2:
--------
Reproduction steps:
1. sudo ethtool -C eth0 adaptive-rx on
2. sudo ethtool -C eth0 rx-usecs 128
3. ethtool -c eth0

expected output: rx-usecs 128
actual output: rx-usecs 0

Reason for issue:
In stage 2, when ena_set_coalesce() is called, the handler tests if
rx adaptive interrupt moderation is on, and if it is, it returns before
getting to the part in the function that sets the rx non-adaptive
interrupt moderation interval.

Solution to issue:
Remove the return from the function when rx adaptive interrupt moderation
is on.

Also cleaned up the fixed code in ena_set_coalesce by grouping together
adaptive interrupt moderation toggling, and using && instead of nested
ifs.

Fixes: b3db86dc4b ("net: ena: reimplement set/get_coalesce()")
Fixes: 0eda847953 ("net: ena: fix retrieval of nonadaptive interrupt moderation intervals")
Fixes: 1738cd3ed3 ("net: ena: Add a driver for Amazon Elastic Network Adapters (ENA)")
Signed-off-by: Arthur Kiyanovski <akiyano@amazon.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
2019-12-20 21:43:08 -08:00
..
ena_admin_defs.h net: ena: enable the interrupt_moderation in driver_supported_features 2019-09-16 22:06:02 +02:00
ena_com.c net: ena: fix incorrect update of intr_delay_resolution 2019-09-16 22:06:03 +02:00
ena_com.h net: ena: fix default tx interrupt moderation interval 2019-12-20 21:43:08 -08:00
ena_common_defs.h net: ena: complete host info to match latest ENA spec 2018-10-11 10:13:50 -07:00
ena_eth_com.c net: ena: clean up indentation issue 2019-09-27 20:32:02 +02:00
ena_eth_com.h net: ena: optimise calculations for CQ doorbell 2019-06-03 13:30:38 -07:00
ena_eth_io_defs.h net: ena: fix indentations in ena_defs for better readability 2018-10-11 10:13:51 -07:00
ena_ethtool.c net: ena: fix issues in setting interrupt moderation params in ethtool 2019-12-20 21:43:08 -08:00
ena_netdev.c net: ena: fix napi handler misbehavior when the napi budget is zero 2019-12-10 17:54:55 -08:00
ena_netdev.h net: ena: ethtool: support set_channels callback 2019-10-07 09:30:03 -04:00
ena_pci_id_tbl.h
ena_regs_defs.h net: ena: fix indentations in ena_defs for better readability 2018-10-11 10:13:51 -07:00
Makefile treewide: Add SPDX license identifier - Makefile/Kconfig 2019-05-21 10:50:46 +02:00