From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mails.dpdk.org (mails.dpdk.org [217.70.189.124]) by inbox.dpdk.org (Postfix) with ESMTP id AB7A541EA5 for ; Wed, 15 Mar 2023 23:47:54 +0100 (CET) Received: from mails.dpdk.org (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id A5E2E42B71; Wed, 15 Mar 2023 23:47:54 +0100 (CET) Received: from mail-wr1-f52.google.com (mail-wr1-f52.google.com [209.85.221.52]) by mails.dpdk.org (Postfix) with ESMTP id 947BB42686 for ; Wed, 15 Mar 2023 23:47:53 +0100 (CET) Received: by mail-wr1-f52.google.com with SMTP id h17so4671845wrt.8 for ; Wed, 15 Mar 2023 15:47:53 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; t=1678920473; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=rAuI2RN6FlavVuUs7XhAbidi1T7IF4bTms6tyxODyUM=; b=feyzHMP63S322C8CqIG+AYZMqkWKORN1WEpoEDIRhRtA9KxO3iXc7OT3BvBqKBun9H BTgCeEEEEix37a2Tm69hft7ykCcanqNT3q+mZ5kPEUjJ3/jWnbU85NbBKXu33Bsa3dw1 s9Dm35lbTzogoixoL4Lgb5bvbIR34dyrbCdINPQfMwl5JSCPzMW22aFlFf08GqtV8QH9 ze/dC2ze1as+Tt2x8AwBGBGGp99AIaeeeotQUCEf+IFPmzOE1ajFqnMgZJR/sxWIT52b 2xmIgImxF4gwVLb0CvQ7z4DegBFoJCcn1hPg170z1+3KqK59R+DCEhAwC0sXt64Pg4wh cbow== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; t=1678920473; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=rAuI2RN6FlavVuUs7XhAbidi1T7IF4bTms6tyxODyUM=; b=nOb16EAGhRQlfX+VYngVs44aESWGtSCm0WoNddzEFI5aqfI2kZhUiTgL6pLauIcJ5d 85WrGlsuGMmlul9lIMTPamIgX5ZzLaerP7rd6cxZSc8ftxDKaw9a1LjH1KVY5YtmagQp U9Kd4zHLHQjkeP0dMDZ/6tsZ5kcTHXn73Ga1Ga3mtdqkqDQqS/y/6OU+tN6eNq0xOCU1 R5kke3DU6zGofHJJDfXqNv/T5m4VWEz/o0DbMmkxUIakX0pSuNmq4r3T9lVgiWmpRw2f NYHnBVzMioepAzB8ORrmSUqaPQqUneYq+kPRcYDmonNdQ+XfSfcZSXRnJBllE/ZqXxoQ 0BnA== X-Gm-Message-State: AO0yUKXDLcBGcoP1OX1/Dw+1n9wJ03wkPZfocOFEpM8/pjhKS1n533R8 Nrzu8dqPGeTmTEj39FtouXwTaxktbJdztw== X-Google-Smtp-Source: AK7set+j9wcuCxQYOIpqlRi1NGatnSWGbLXTMkZuDAmg7hXYwhblr1e7xGQGwKTgpjz5pvW1ildsGw== X-Received: by 2002:a5d:6ace:0:b0:2c5:594b:10d5 with SMTP id u14-20020a5d6ace000000b002c5594b10d5mr3464449wrw.1.1678920473311; Wed, 15 Mar 2023 15:47:53 -0700 (PDT) Received: from localhost ([137.220.119.58]) by smtp.gmail.com with ESMTPSA id u25-20020a7bc059000000b003e21f959453sm3077580wmc.32.2023.03.15.15.47.52 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 15 Mar 2023 15:47:53 -0700 (PDT) From: luca.boccassi@gmail.com To: Huisong Li Cc: Dongdong Liu , dpdk stable Subject: patch 'net/hns3: separate setting hash algorithm' has been queued to stable release 20.11.8 Date: Wed, 15 Mar 2023 22:46:20 +0000 Message-Id: <20230315224631.1025649-29-luca.boccassi@gmail.com> X-Mailer: git-send-email 2.39.2 In-Reply-To: <20230315224631.1025649-1-luca.boccassi@gmail.com> References: <20230223093715.3926893-71-luca.boccassi@gmail.com> <20230315224631.1025649-1-luca.boccassi@gmail.com> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-BeenThere: stable@dpdk.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: patches for DPDK stable branches List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: stable-bounces@dpdk.org Hi, FYI, your patch has been queued to stable release 20.11.8 Note it hasn't been pushed to http://dpdk.org/browse/dpdk-stable yet. It will be pushed if I get no objections before 03/17/23. So please shout if anyone has objections. Also note that after the patch there's a diff of the upstream commit vs the patch applied to the branch. This will indicate if there was any rebasing needed to apply to the stable branch. If there were code changes for rebasing (ie: not only metadata diffs), please double check that the rebase was correctly done. Queued patches are on a temporary branch at: https://github.com/bluca/dpdk-stable This queued commit can be viewed at: https://github.com/bluca/dpdk-stable/commit/cce3f130c3110daa464819213d233b0bd4847a71 Thanks. Luca Boccassi --- >From cce3f130c3110daa464819213d233b0bd4847a71 Mon Sep 17 00:00:00 2001 From: Huisong Li Date: Fri, 10 Mar 2023 17:35:08 +0800 Subject: [PATCH] net/hns3: separate setting hash algorithm [ upstream commit 1fcbef5ccb993b6028a3f8a68a7b01f9b8c67413 ] Currently, the setting of hash algorithm comes from the default configuration in driver and the rte_flow interface. The hash algorithm that is set to hardware in both ways is saved in hw->rss_info.conf.func. But the 'func' in struct rte_flow_action_rss is usually used in rte flow interface. And the ethdev ops interface may also set hash algorithm in the future. It is not appropriate and is a little messy for ethdev ops interface and driver default configuration to use struct rte_flow_action_rss. So we have to separate the RSS configuration from ethdev ops and rte flow interface to make codes more easier to maintain. This patch separates hash algorithm by following ways: 1) 'hash_algo' in struct hns3_rss_conf is used for ethdev ops interface or default configuration in driver. 2) Add a 'rte_flow_hash_algo' field in struct hns3_rss_conf to save algorithm from rte flow interface. The main reasons are as follows: Currently, only the last rule is used to restore the rte flow rule. If 'func' in RSS action is 'DEFAULT', it means that this rule doesn't modify algorithm and driver need to save current algorithm for restoring algorithm during reset phase. Fixes: c37ca66f2b27 ("net/hns3: support RSS") Signed-off-by: Huisong Li Signed-off-by: Dongdong Liu --- drivers/net/hns3/hns3_flow.c | 60 +++++++++++++++++++++--------------- drivers/net/hns3/hns3_rss.c | 14 +-------- drivers/net/hns3/hns3_rss.h | 1 + 3 files changed, 37 insertions(+), 38 deletions(-) diff --git a/drivers/net/hns3/hns3_flow.c b/drivers/net/hns3/hns3_flow.c index 400054a9a2..cddf4e540c 100644 --- a/drivers/net/hns3/hns3_flow.c +++ b/drivers/net/hns3/hns3_flow.c @@ -1406,30 +1406,40 @@ hns3_disable_rss(struct hns3_hw *hw) } static int -hns3_parse_rss_algorithm(struct hns3_hw *hw, enum rte_eth_hash_function *func, +hns3_parse_rss_algorithm(struct hns3_hw *hw, enum rte_eth_hash_function func, uint8_t *hash_algo) { - enum rte_eth_hash_function algo_func = *func; - switch (algo_func) { - case RTE_ETH_HASH_FUNCTION_DEFAULT: - /* Keep *hash_algo as what it used to be */ - algo_func = hw->rss_info.conf.func; - break; - case RTE_ETH_HASH_FUNCTION_TOEPLITZ: - *hash_algo = HNS3_RSS_HASH_ALGO_TOEPLITZ; - break; - case RTE_ETH_HASH_FUNCTION_SIMPLE_XOR: - *hash_algo = HNS3_RSS_HASH_ALGO_SIMPLE; - break; - case RTE_ETH_HASH_FUNCTION_SYMMETRIC_TOEPLITZ: - *hash_algo = HNS3_RSS_HASH_ALGO_SYMMETRIC_TOEP; - break; - default: - hns3_err(hw, "Invalid RSS algorithm configuration(%d)", - algo_func); - return -EINVAL; + const uint8_t hash_func_map[] = { + [RTE_ETH_HASH_FUNCTION_DEFAULT] = HNS3_RSS_HASH_ALGO_TOEPLITZ, + [RTE_ETH_HASH_FUNCTION_TOEPLITZ] = HNS3_RSS_HASH_ALGO_TOEPLITZ, + [RTE_ETH_HASH_FUNCTION_SIMPLE_XOR] = HNS3_RSS_HASH_ALGO_SIMPLE, + [RTE_ETH_HASH_FUNCTION_SYMMETRIC_TOEPLITZ] = HNS3_RSS_HASH_ALGO_SYMMETRIC_TOEP, + }; + uint8_t key[HNS3_RSS_KEY_SIZE_MAX] = {0}; + int ret; + + if (func == RTE_ETH_HASH_FUNCTION_DEFAULT) { + ret = hns3_rss_get_algo_key(hw, hash_algo, key, + hw->rss_key_size); + if (ret != 0) { + hns3_err(hw, "fail to get current RSS hash algorithm, ret = %d", + ret); + return ret; + } + + /* + * During the phase of reset recovery, the hash algorithm + * obtained from hardware may not be the one used(saved in + * rte_flow_hash_algo) when this rule is delivered. + */ + if (__atomic_load_n((uint16_t *)&hw->reset.resetting, __ATOMIC_RELAXED) && + *hash_algo != hw->rss_info.rte_flow_hash_algo) + *hash_algo = hw->rss_info.rte_flow_hash_algo; + + return 0; } - *func = algo_func; + + *hash_algo = hash_func_map[func]; return 0; } @@ -1439,6 +1449,7 @@ hns3_hw_rss_hash_set(struct hns3_hw *hw, struct rte_flow_action_rss *rss_config) { uint8_t rss_key[HNS3_RSS_KEY_SIZE_MAX] = {0}; bool use_default_key = false; + uint8_t hash_algo; int ret; if (rss_config->key == NULL || rss_config->key_len != hw->rss_key_size) { @@ -1448,18 +1459,17 @@ hns3_hw_rss_hash_set(struct hns3_hw *hw, struct rte_flow_action_rss *rss_config) use_default_key = true; } - ret = hns3_parse_rss_algorithm(hw, &rss_config->func, - &hw->rss_info.hash_algo); + ret = hns3_parse_rss_algorithm(hw, rss_config->func, &hash_algo); if (ret) return ret; - ret = hns3_set_rss_algo_key(hw, hw->rss_info.hash_algo, + ret = hns3_set_rss_algo_key(hw, hash_algo, use_default_key ? rss_key : rss_config->key, hw->rss_key_size); if (ret) return ret; - hw->rss_info.conf.func = rss_config->func; + hw->rss_info.rte_flow_hash_algo = hash_algo; ret = hns3_set_rss_tuple_by_rss_hf(hw, rss_config->types); if (ret) diff --git a/drivers/net/hns3/hns3_rss.c b/drivers/net/hns3/hns3_rss.c index d36c1776bb..4b5d6f6e2b 100644 --- a/drivers/net/hns3/hns3_rss.c +++ b/drivers/net/hns3/hns3_rss.c @@ -1027,7 +1027,7 @@ hns3_set_default_rss_args(struct hns3_hw *hw) int i; /* Default hash algorithm */ - rss_cfg->conf.func = RTE_ETH_HASH_FUNCTION_TOEPLITZ; + rss_cfg->hash_algo = HNS3_RSS_HASH_ALGO_TOEPLITZ; memcpy(rss_cfg->key, hns3_hash_key, RTE_MIN(sizeof(hns3_hash_key), hw->rss_key_size)); @@ -1051,18 +1051,6 @@ hns3_config_rss(struct hns3_adapter *hns) enum rte_eth_rx_mq_mode mq_mode = hw->data->dev_conf.rxmode.mq_mode; - switch (hw->rss_info.conf.func) { - case RTE_ETH_HASH_FUNCTION_SIMPLE_XOR: - hw->rss_info.hash_algo = HNS3_RSS_HASH_ALGO_SIMPLE; - break; - case RTE_ETH_HASH_FUNCTION_SYMMETRIC_TOEPLITZ: - hw->rss_info.hash_algo = HNS3_RSS_HASH_ALGO_SYMMETRIC_TOEP; - break; - default: - hw->rss_info.hash_algo = HNS3_RSS_HASH_ALGO_TOEPLITZ; - break; - } - ret = hns3_set_rss_algo_key(hw, rss_cfg->hash_algo, hash_key, hw->rss_key_size); if (ret) diff --git a/drivers/net/hns3/hns3_rss.h b/drivers/net/hns3/hns3_rss.h index b724490fe2..eee5c98278 100644 --- a/drivers/net/hns3/hns3_rss.h +++ b/drivers/net/hns3/hns3_rss.h @@ -46,6 +46,7 @@ struct hns3_rss_conf { /* RSS parameters :algorithm, flow_types, key, queue */ struct rte_flow_action_rss conf; uint8_t hash_algo; /* hash function type defined by hardware */ + uint8_t rte_flow_hash_algo; uint8_t key[HNS3_RSS_KEY_SIZE_MAX]; /* Hash key */ uint16_t rss_indirection_tbl[HNS3_RSS_IND_TBL_SIZE_MAX]; uint16_t queue[HNS3_RSS_QUEUES_BUFFER_NUM]; /* Queues indices to use */ -- 2.39.2 --- Diff of the applied patch vs upstream commit (please double-check if non-empty: --- --- - 2023-03-15 22:44:51.297852136 +0000 +++ 0029-net-hns3-separate-setting-hash-algorithm.patch 2023-03-15 22:44:49.635851351 +0000 @@ -1 +1 @@ -From 1fcbef5ccb993b6028a3f8a68a7b01f9b8c67413 Mon Sep 17 00:00:00 2001 +From cce3f130c3110daa464819213d233b0bd4847a71 Mon Sep 17 00:00:00 2001 @@ -5,0 +6,2 @@ +[ upstream commit 1fcbef5ccb993b6028a3f8a68a7b01f9b8c67413 ] + @@ -32 +33,0 @@ -Cc: stable@dpdk.org @@ -43 +44 @@ -index 881d70613c..2faeb9ca52 100644 +index 400054a9a2..cddf4e540c 100644 @@ -46 +47 @@ -@@ -1438,30 +1438,40 @@ hns3_disable_rss(struct hns3_hw *hw) +@@ -1406,30 +1406,40 @@ hns3_disable_rss(struct hns3_hw *hw) @@ -96 +97 @@ -+ if (__atomic_load_n(&hw->reset.resetting, __ATOMIC_RELAXED) && ++ if (__atomic_load_n((uint16_t *)&hw->reset.resetting, __ATOMIC_RELAXED) && @@ -108 +109 @@ -@@ -1471,6 +1481,7 @@ hns3_hw_rss_hash_set(struct hns3_hw *hw, struct rte_flow_action_rss *rss_config) +@@ -1439,6 +1449,7 @@ hns3_hw_rss_hash_set(struct hns3_hw *hw, struct rte_flow_action_rss *rss_config) @@ -116 +117 @@ -@@ -1480,18 +1491,17 @@ hns3_hw_rss_hash_set(struct hns3_hw *hw, struct rte_flow_action_rss *rss_config) +@@ -1448,18 +1459,17 @@ hns3_hw_rss_hash_set(struct hns3_hw *hw, struct rte_flow_action_rss *rss_config) @@ -126,2 +127,2 @@ -- ret = hns3_rss_set_algo_key(hw, hw->rss_info.hash_algo, -+ ret = hns3_rss_set_algo_key(hw, hash_algo, +- ret = hns3_set_rss_algo_key(hw, hw->rss_info.hash_algo, ++ ret = hns3_set_rss_algo_key(hw, hash_algo, @@ -139 +140 @@ -index 7dc4e03d83..dcd42b554a 100644 +index d36c1776bb..4b5d6f6e2b 100644 @@ -142,2 +143,2 @@ -@@ -1022,7 +1022,7 @@ hns3_rss_set_default_args(struct hns3_hw *hw) - uint16_t i; +@@ -1027,7 +1027,7 @@ hns3_set_default_rss_args(struct hns3_hw *hw) + int i; @@ -151 +152 @@ -@@ -1046,18 +1046,6 @@ hns3_config_rss(struct hns3_adapter *hns) +@@ -1051,18 +1051,6 @@ hns3_config_rss(struct hns3_adapter *hns) @@ -167 +168 @@ - ret = hns3_rss_set_algo_key(hw, rss_cfg->hash_algo, + ret = hns3_set_rss_algo_key(hw, rss_cfg->hash_algo, @@ -171 +172 @@ -index 17473e70e2..6e679b709b 100644 +index b724490fe2..eee5c98278 100644 @@ -174 +175 @@ -@@ -42,6 +42,7 @@ struct hns3_rss_conf { +@@ -46,6 +46,7 @@ struct hns3_rss_conf {