• Corinna Vinschen's avatar
    net: stmmac: fix up RX flow hash indirection table when setting channels · 218c5973
    Corinna Vinschen authored
    stmmac_reinit_queues() fails to fix up the RX hash.  Even if the number
    of channels gets restricted, the output of `ethtool -x' indicates that
    all RX queues are used:
    
      $ ethtool -l enp0s29f2
      Channel parameters for enp0s29f2:
      Pre-set maximums:
      RX:		8
      TX:		8
      Other:		n/a
      Combined:	n/a
      Current hardware settings:
      RX:		8
      TX:		8
      Other:		n/a
      Combined:	n/a
      $ ethtool -x enp0s29f2
      RX flow hash indirection table for enp0s29f2 with 8 RX ring(s):
          0:      0     1     2     3     4     5     6     7
          8:      0     1     2     3     4     5     6     7
      [...]
      $ ethtool -L enp0s29f2 rx 3
      $ ethtool -x enp0s29f2
      RX flow hash indirection table for enp0s29f2 with 3 RX ring(s):
          0:      0     1     2     3     4     5     6     7
          8:      0     1     2     3     4     5     6     7
      [...]
    
    Fix this by setting the indirection table according to the number
    of specified queues.  The result is now as expected:
    
      $ ethtool -L enp0s29f2 rx 3
      $ ethtool -x enp0s29f2
      RX flow hash indirection table for enp0s29f2 with 3 RX ring(s):
          0:      0     1     2     0     1     2     0     1
          8:      2     0     1     2     0     1     2     0
      [...]
    
    Tested on Intel Elkhart Lake.
    
    Fixes: 0366f7e0 ("net: stmmac: add ethtool support for get/set channels")
    Signed-off-by: default avatarCorinna Vinschen <vinschen@redhat.com>
    Link: https://lore.kernel.org/r/20230403121120.489138-1-vinschen@redhat.comSigned-off-by: default avatarPaolo Abeni <pabeni@redhat.com>
    218c5973
stmmac_main.c 206 KB