• Arthur Kiyanovski's avatar
    UBUNTU: SAUCE: net: ena: fix issues in setting interrupt moderation params in ethtool · 4a7fde55
    Arthur Kiyanovski authored
    BugLink: https://bugs.launchpad.net/bugs/1853180
    
    
    
    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 rx-usecs 128
    2. sudo ethtool -C eth0 adaptive-rx on
    3. sudo ethtool -C eth0 rx-usecs 128
    4. ethtool -c eth0
    
    expected output: rx-usecs 128
    actual output: rx-usecs 0
    
    Reason for issue:
    In stage 3, 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.
    
    Additional small fixes in this commit:
    --------------------------------------
    1. Remove 2 unnecessary comments.
    2. Remove 4 unnecesary "{}" in single row if statements.
    3. Reorder ena_set_coalesce() to make sense.
    4. Change the names of ena_update_tx/rx_rings_intr_moderation()
       functions to ena_update_tx/rx_rings_nonadaptive_intr_moderation() for
       clarity.
    Signed-off-by: default avatarArthur Kiyanovski <akiyano@amazon.com>
    Reference: https://lore.kernel.org/netdev/1572868728-5211-1-git-send-email-akiyano@amazon.com/
    
    Signed-off-by: default avatarKamal Mostafa <kamal@canonical.com>
    Acked-by: default avatarKhaled Elmously <khalid.elmously@canonical.com>
    Acked-by: default avatarConnor Kuehl <connor.kuehl@canonical.com>
    Signed-off-by: default avatarStefan Bader <stefan.bader@canonical.com>
    4a7fde55
ena_ethtool.c 21.2 KB