• Arthur Kiyanovski's avatar
    net: ena: rss: store hash function as values and not bits · 4844470d
    Arthur Kiyanovski authored
    The device receives, stores and retrieves the hash function value as bits
    and not as their enum value.
    
    The bug:
    * In ena_com_set_hash_function() we set
      cmd.u.flow_hash_func.selected_func to the bit value of rss->hash_func.
     (1 << rss->hash_func)
    * In ena_com_get_hash_function() we retrieve the hash function and store
      it's bit value in rss->hash_func. (Now the bit value of rss->hash_func
      is stored in rss->hash_func instead of it's enum value)
    
    The fix:
    This commit fixes the issue by converting the retrieved hash function
    values from the device to the matching enum value of the set bit using
    ffs(). ffs() finds the first set bit's index in a word. Since the function
    returns 1 for the LSB's index, we need to subtract 1 from the returned
    value (note that BIT(0) is 1).
    
    Fixes: 1738cd3e ("net: ena: Add a driver for Amazon Elastic Network Adapters (ENA)")
    Signed-off-by: default avatarSameeh Jubran <sameehj@amazon.com>
    Signed-off-by: default avatarArthur Kiyanovski <akiyano@amazon.com>
    Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
    4844470d
ena_com.c 80.8 KB