Sync some patchs from upstreaming and modifies are as follow: - net/hns3: fix mailbox sync - net/hns3: report maximum buffer size - ethdev: add maximum Rx buffer size - app/procinfo: show RSS hash algorithm - ethdev: get RSS algorithm names - app/procinfo: adjust format of RSS info - app/procinfo: fix RSS info - net/hns3: support setting and querying RSS hash function - net/hns3: report RSS hash algorithms capability - ethdev: set and query RSS hash algorithm - ethdev: clarify RSS related fields usage - net/hns3: fix uninitialized hash algo value - net/hns3: keep set/get algo key functions local - net/hns3: fix some error logs - net/hns3: fix some return values - net/hns3: fix LRO offload to report - net/hns3: fix setting DCB capability - app/testpmd: ease configuring all offloads - net/hns3: refactor interrupt state query - net/hns3: fix IMP or global reset - net/hns3: fix multiple reset detected log - net/hns3: remove reset log in secondary - net/hns3: fix double stats for IMP and global reset - net/hns3: fix crash for NEON and SVE - net/hns3: fix unchecked Rx free threshold - net/hns3: fix typo in function name - net/hns3: fix build warning - telemetry: fix repeat display when callback don't init dict Signed-off-by: Dengdui Huang <huangdengdui@huawei.com>
103 lines
3.2 KiB
Diff
103 lines
3.2 KiB
Diff
From 551ff5a491295b17551d81f5c77a5167abc766fc Mon Sep 17 00:00:00 2001
|
|
From: Huisong Li <lihuisong@huawei.com>
|
|
Date: Thu, 2 Nov 2023 16:20:15 +0800
|
|
Subject: [PATCH 387/394] net/hns3: support setting and querying RSS hash
|
|
function
|
|
|
|
[ upstream commit 9913a55d37f7a80c143de3c5eb4ba39f266291cb ]
|
|
|
|
Support setting and querying RSS hash function by ethdev ops.
|
|
|
|
Signed-off-by: Huisong Li <lihuisong@huawei.com>
|
|
Signed-off-by: Dongdong Liu <liudongdong3@huawei.com>
|
|
Signed-off-by: Jie Hai <haijie1@huawei.com>
|
|
Acked-by: Chengwen Feng <fengchengwen@huawei.com>
|
|
---
|
|
drivers/net/hns3/hns3_rss.c | 47 +++++++++++++++++++++----------------
|
|
1 file changed, 27 insertions(+), 20 deletions(-)
|
|
|
|
diff --git a/drivers/net/hns3/hns3_rss.c b/drivers/net/hns3/hns3_rss.c
|
|
index eeeca71a5c..15feb26043 100644
|
|
--- a/drivers/net/hns3/hns3_rss.c
|
|
+++ b/drivers/net/hns3/hns3_rss.c
|
|
@@ -646,14 +646,14 @@ hns3_dev_rss_hash_update(struct rte_eth_dev *dev,
|
|
if (ret)
|
|
goto set_tuple_fail;
|
|
|
|
- if (key) {
|
|
- ret = hns3_rss_set_algo_key(hw, hw->rss_info.hash_algo,
|
|
- key, hw->rss_key_size);
|
|
- if (ret)
|
|
- goto set_algo_key_fail;
|
|
- /* Update the shadow RSS key with user specified */
|
|
+ ret = hns3_update_rss_algo_key(hw, rss_conf->algorithm, key, key_len);
|
|
+ if (ret != 0)
|
|
+ goto set_algo_key_fail;
|
|
+
|
|
+ if (rss_conf->algorithm != RTE_ETH_HASH_FUNCTION_DEFAULT)
|
|
+ hw->rss_info.hash_algo = hns3_hash_func_map[rss_conf->algorithm];
|
|
+ if (key != NULL)
|
|
memcpy(hw->rss_info.key, key, hw->rss_key_size);
|
|
- }
|
|
hw->rss_info.rss_hf = rss_hf;
|
|
rte_spinlock_unlock(&hw->lock);
|
|
|
|
@@ -769,7 +769,13 @@ int
|
|
hns3_dev_rss_hash_conf_get(struct rte_eth_dev *dev,
|
|
struct rte_eth_rss_conf *rss_conf)
|
|
{
|
|
+ const uint8_t hash_func_map[] = {
|
|
+ [HNS3_RSS_HASH_ALGO_TOEPLITZ] = RTE_ETH_HASH_FUNCTION_TOEPLITZ,
|
|
+ [HNS3_RSS_HASH_ALGO_SIMPLE] = RTE_ETH_HASH_FUNCTION_SIMPLE_XOR,
|
|
+ [HNS3_RSS_HASH_ALGO_SYMMETRIC_TOEP] = RTE_ETH_HASH_FUNCTION_SYMMETRIC_TOEPLITZ,
|
|
+ };
|
|
struct hns3_adapter *hns = dev->data->dev_private;
|
|
+ uint8_t rss_key[HNS3_RSS_KEY_SIZE_MAX] = {0};
|
|
struct hns3_hw *hw = &hns->hw;
|
|
uint8_t hash_algo = 0;
|
|
int ret;
|
|
@@ -777,26 +783,27 @@ hns3_dev_rss_hash_conf_get(struct rte_eth_dev *dev,
|
|
rte_spinlock_lock(&hw->lock);
|
|
ret = hns3_rss_hash_get_rss_hf(hw, &rss_conf->rss_hf);
|
|
if (ret != 0) {
|
|
+ rte_spinlock_unlock(&hw->lock);
|
|
hns3_err(hw, "obtain hash tuples failed, ret = %d", ret);
|
|
- goto out;
|
|
+ return ret;
|
|
+ }
|
|
+
|
|
+ ret = hns3_rss_get_algo_key(hw, &hash_algo, rss_key, hw->rss_key_size);
|
|
+ if (ret != 0) {
|
|
+ rte_spinlock_unlock(&hw->lock);
|
|
+ hns3_err(hw, "obtain hash algo and key failed, ret = %d", ret);
|
|
+ return ret;
|
|
}
|
|
+ rte_spinlock_unlock(&hw->lock);
|
|
|
|
- /* Get the RSS Key required by the user */
|
|
+ /* Get the RSS Key if user required. */
|
|
if (rss_conf->rss_key && rss_conf->rss_key_len >= hw->rss_key_size) {
|
|
- ret = hns3_rss_get_algo_key(hw, &hash_algo, rss_conf->rss_key,
|
|
- hw->rss_key_size);
|
|
- if (ret != 0) {
|
|
- hns3_err(hw, "obtain hash algo and key failed, ret = %d",
|
|
- ret);
|
|
- goto out;
|
|
- }
|
|
+ memcpy(rss_conf->rss_key, rss_key, hw->rss_key_size);
|
|
rss_conf->rss_key_len = hw->rss_key_size;
|
|
}
|
|
+ rss_conf->algorithm = hash_func_map[hash_algo];
|
|
|
|
-out:
|
|
- rte_spinlock_unlock(&hw->lock);
|
|
-
|
|
- return ret;
|
|
+ return 0;
|
|
}
|
|
|
|
/*
|
|
--
|
|
2.23.0
|
|
|