From c64a6bc62d140b78efb27106beba5252f74b29e0 Mon Sep 17 00:00:00 2001 From: Adrian Chadd Date: Sun, 20 Jul 2014 04:11:18 +0000 Subject: 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 --- sys/dev/ixgbe/ixgbe.c | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) (limited to 'sys/dev') 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 */ -- cgit v1.2.3