diff options
author | Adrian Chadd <adrian@FreeBSD.org> | 2014-07-20 04:11:18 +0000 |
---|---|---|
committer | Adrian Chadd <adrian@FreeBSD.org> | 2014-07-20 04:11:18 +0000 |
commit | c64a6bc62d140b78efb27106beba5252f74b29e0 (patch) | |
tree | 57f5764bcbb3cc8b05ec1132a99f8867640af0d0 /sys/dev | |
parent | 31411fea11e454aabd60fbc3ccc0046f95ff3f13 (diff) | |
download | src-c64a6bc62d140b78efb27106beba5252f74b29e0.tar.gz src-c64a6bc62d140b78efb27106beba5252f74b29e0.zip |
Correctly program the RSS redirection table entries.
Without this, the RSS bucket assignments aren't correct - they're
DCBA instead of ABCD in each DWORD.
Tested: 82599EB ixgbe(4), TCP and UDP RSS
Notes
Notes:
svn path=/head/; revision=268907
Diffstat (limited to 'sys/dev')
-rw-r--r-- | sys/dev/ixgbe/ixgbe.c | 12 |
1 files changed, 9 insertions, 3 deletions
diff --git a/sys/dev/ixgbe/ixgbe.c b/sys/dev/ixgbe/ixgbe.c index 7c4a2772b150..ee01060c2aee 100644 --- a/sys/dev/ixgbe/ixgbe.c +++ b/sys/dev/ixgbe/ixgbe.c @@ -4230,10 +4230,16 @@ ixgbe_initialise_rss_mapping(struct adapter *adapter) #else queue_id = (j * 0x11); #endif - /* XXX endian? */ - reta = (reta << 8) | queue_id; - if ((i & 3) == 3) + /* + * The low 8 bits are for hash value (n+0); + * The next 8 bits are for hash value (n+1), etc. + */ + reta = reta >> 8; + reta = reta | ( ((uint32_t) queue_id) << 24); + if ((i & 3) == 3) { IXGBE_WRITE_REG(hw, IXGBE_RETA(i >> 2), reta); + reta = 0; + } } /* Now fill our hash function seeds */ |