bnx2x: byte swap rss_key to comply to Toeplitz specs
After a good amount of debugging, I found bnx2x was byte swaping the 40 bytes of rss_key. If we byte swap the key, then bnx2x generates hashes matching MSDN specs as documented in (Verifying the RSS Hash Calculation) https://msdn.microsoft.com/en-us/library/windows/hardware/ff571021% 28v=vs.85%29.aspx It is mostly a non issue, unless we want to mix different NIC in a host, and want consistent hashing among all of them, ie if they all use the boot time generated rss key, or if some application is choosing specific tuple(s) so that incoming traffic lands into known rx queue(s). Signed-off-by: Eric Dumazet <edumazet@google.com> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
parent
d8aecb1011
commit
d682d2bdc3
|
@ -4319,8 +4319,16 @@ static int bnx2x_setup_rss(struct bnx2x *bp,
|
||||||
|
|
||||||
/* RSS keys */
|
/* RSS keys */
|
||||||
if (test_bit(BNX2X_RSS_SET_SRCH, &p->rss_flags)) {
|
if (test_bit(BNX2X_RSS_SET_SRCH, &p->rss_flags)) {
|
||||||
memcpy(&data->rss_key[0], &p->rss_key[0],
|
u8 *dst = (u8 *)(data->rss_key) + sizeof(data->rss_key);
|
||||||
sizeof(data->rss_key));
|
const u8 *src = (const u8 *)p->rss_key;
|
||||||
|
int i;
|
||||||
|
|
||||||
|
/* Apparently, bnx2x reads this array in reverse order
|
||||||
|
* We need to byte swap rss_key to comply with Toeplitz specs.
|
||||||
|
*/
|
||||||
|
for (i = 0; i < sizeof(data->rss_key); i++)
|
||||||
|
*--dst = *src++;
|
||||||
|
|
||||||
caps |= ETH_RSS_UPDATE_RAMROD_DATA_UPDATE_RSS_KEY;
|
caps |= ETH_RSS_UPDATE_RAMROD_DATA_UPDATE_RSS_KEY;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue