]> git.baikalelectronics.ru Git - kernel.git/commit
net: ena: fix issues in setting interrupt moderation params in ethtool
authorArthur Kiyanovski <akiyano@amazon.com>
Thu, 19 Dec 2019 15:40:56 +0000 (17:40 +0200)
committerDavid S. Miller <davem@davemloft.net>
Sat, 21 Dec 2019 05:43:08 +0000 (21:43 -0800)
commitefc6e2c73a69f4af5a5b7acf4a3fc4fbfc6d7537
treefa41a34fac803a840c3e1b8ce0eceeb3a9eac6f8
parentf137af39619153ac0d8f4f5073a84f6ca9e05c2d
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: b49e5cf0308f ("net: ena: reimplement set/get_coalesce()")
Fixes: 4a1b99ca9000 ("net: ena: fix retrieval of nonadaptive interrupt moderation intervals")
Fixes: e59074db59c6 ("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>
drivers/net/ethernet/amazon/ena/ena_ethtool.c