aboutsummaryrefslogtreecommitdiff
path: root/sys/dev
diff options
context:
space:
mode:
authorAdrian Chadd <adrian@FreeBSD.org>2014-07-20 04:11:18 +0000
committerAdrian Chadd <adrian@FreeBSD.org>2014-07-20 04:11:18 +0000
commitc64a6bc62d140b78efb27106beba5252f74b29e0 (patch)
tree57f5764bcbb3cc8b05ec1132a99f8867640af0d0 /sys/dev
parent31411fea11e454aabd60fbc3ccc0046f95ff3f13 (diff)
downloadsrc-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.c12
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 */