| From f9a7ae234ff08448072e4e1ce6858af3a7e98131 Mon Sep 17 00:00:00 2001 |
| From: Sasha Levin <sashal@kernel.org> |
| Date: Thu, 29 Dec 2022 07:30:05 +0000 |
| Subject: net: ena: Fix toeplitz initial hash value |
| |
| From: David Arinzon <darinzon@amazon.com> |
| |
| [ Upstream commit 332b49ff637d6c1a75b971022a8b992cf3c57db1 ] |
| |
| On driver initialization, RSS hash initial value is set to zero, |
| instead of the default value. This happens because we pass NULL as |
| the RSS key parameter, which caused us to never initialize |
| the RSS hash value. |
| |
| This patch fixes it by making sure the initial value is set, no matter |
| what the value of the RSS key is. |
| |
| Fixes: 91a65b7d3ed8 ("net: ena: fix potential crash when rxfh key is NULL") |
| Signed-off-by: Nati Koler <nkoler@amazon.com> |
| Signed-off-by: David Arinzon <darinzon@amazon.com> |
| Signed-off-by: David S. Miller <davem@davemloft.net> |
| Signed-off-by: Sasha Levin <sashal@kernel.org> |
| --- |
| drivers/net/ethernet/amazon/ena/ena_com.c | 29 +++++++---------------- |
| 1 file changed, 9 insertions(+), 20 deletions(-) |
| |
| diff --git a/drivers/net/ethernet/amazon/ena/ena_com.c b/drivers/net/ethernet/amazon/ena/ena_com.c |
| index 8c8b4c88c7de..451c3a1b6255 100644 |
| --- a/drivers/net/ethernet/amazon/ena/ena_com.c |
| +++ b/drivers/net/ethernet/amazon/ena/ena_com.c |
| @@ -2400,29 +2400,18 @@ int ena_com_fill_hash_function(struct ena_com_dev *ena_dev, |
| return -EOPNOTSUPP; |
| } |
| |
| - switch (func) { |
| - case ENA_ADMIN_TOEPLITZ: |
| - if (key) { |
| - if (key_len != sizeof(hash_key->key)) { |
| - netdev_err(ena_dev->net_device, |
| - "key len (%u) doesn't equal the supported size (%zu)\n", |
| - key_len, sizeof(hash_key->key)); |
| - return -EINVAL; |
| - } |
| - memcpy(hash_key->key, key, key_len); |
| - rss->hash_init_val = init_val; |
| - hash_key->key_parts = key_len / sizeof(hash_key->key[0]); |
| + if ((func == ENA_ADMIN_TOEPLITZ) && key) { |
| + if (key_len != sizeof(hash_key->key)) { |
| + netdev_err(ena_dev->net_device, |
| + "key len (%u) doesn't equal the supported size (%zu)\n", |
| + key_len, sizeof(hash_key->key)); |
| + return -EINVAL; |
| } |
| - break; |
| - case ENA_ADMIN_CRC32: |
| - rss->hash_init_val = init_val; |
| - break; |
| - default: |
| - netdev_err(ena_dev->net_device, "Invalid hash function (%d)\n", |
| - func); |
| - return -EINVAL; |
| + memcpy(hash_key->key, key, key_len); |
| + hash_key->key_parts = key_len / sizeof(hash_key->key[0]); |
| } |
| |
| + rss->hash_init_val = init_val; |
| old_func = rss->hash_func; |
| rss->hash_func = func; |
| rc = ena_com_set_hash_function(ena_dev); |
| -- |
| 2.35.1 |
| |