| From: Ivan Vecera <ivecera@redhat.com> |
| Date: Fri, 14 Jun 2019 17:48:36 +0200 |
| Subject: be2net: Fix number of Rx queues used for flow hashing |
| |
| commit 718f4a2537089ea41903bf357071306163bc7c04 upstream. |
| |
| 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: Ben Hutchings <ben@decadent.org.uk> |
| --- |
| 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 |
| @@ -962,7 +962,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; |