lkml.org 
[lkml]   [2019]   [Jun]   [20]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 4.19 02/61] be2net: Fix number of Rx queues used for flow hashing
    Date
    From: Ivan Vecera <ivecera@redhat.com>

    [ Upstream commit 718f4a2537089ea41903bf357071306163bc7c04 ]

    Number of Rx queues used for flow hashing returned by the driver is
    incorrect and this bug prevents user to use the last Rx queue in
    indirection table.

    Let's say we have a NIC with 6 combined queues:

    [root@sm-03 ~]# ethtool -l enp4s0f0
    Channel parameters for enp4s0f0:
    Pre-set maximums:
    RX: 5
    TX: 5
    Other: 0
    Combined: 6
    Current hardware settings:
    RX: 0
    TX: 0
    Other: 0
    Combined: 6

    Default indirection table maps all (6) queues equally but the driver
    reports only 5 rings available.

    [root@sm-03 ~]# ethtool -x enp4s0f0
    RX flow hash indirection table for enp4s0f0 with 5 RX ring(s):
    0: 0 1 2 3 4 5 0 1
    8: 2 3 4 5 0 1 2 3
    16: 4 5 0 1 2 3 4 5
    24: 0 1 2 3 4 5 0 1
    ...

    Now change indirection table somehow:

    [root@sm-03 ~]# ethtool -X enp4s0f0 weight 1 1
    [root@sm-03 ~]# ethtool -x enp4s0f0
    RX flow hash indirection table for enp4s0f0 with 6 RX ring(s):
    0: 0 0 0 0 0 0 0 0
    ...
    64: 1 1 1 1 1 1 1 1
    ...

    Now it is not possible to change mapping back to equal (default) state:

    [root@sm-03 ~]# ethtool -X enp4s0f0 equal 6
    Cannot set RX flow hash configuration: Invalid argument

    Fixes: 594ad54a2c3b ("be2net: Add support for setting and getting rx flow hash options")
    Reported-by: Tianhao <tizhao@redhat.com>
    Signed-off-by: Ivan Vecera <ivecera@redhat.com>
    Signed-off-by: David S. Miller <davem@davemloft.net>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
    ---
    drivers/net/ethernet/emulex/benet/be_ethtool.c | 2 +-
    1 file changed, 1 insertion(+), 1 deletion(-)

    --- a/drivers/net/ethernet/emulex/benet/be_ethtool.c
    +++ b/drivers/net/ethernet/emulex/benet/be_ethtool.c
    @@ -1105,7 +1105,7 @@ static int be_get_rxnfc(struct net_devic
    cmd->data = be_get_rss_hash_opts(adapter, cmd->flow_type);
    break;
    case ETHTOOL_GRXRINGS:
    - cmd->data = adapter->num_rx_qs - 1;
    + cmd->data = adapter->num_rx_qs;
    break;
    default:
    return -EINVAL;

    \
     
     \ /
      Last update: 2019-06-20 20:23    [W:4.974 / U:0.128 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site