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 64590A0555 for ; Wed, 25 May 2022 18:29:45 +0200 (CEST) Received: from [217.70.189.124] (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 5F108400EF; Wed, 25 May 2022 18:29:45 +0200 (CEST) Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [170.10.129.124]) by mails.dpdk.org (Postfix) with ESMTP id E26314280B for ; Wed, 25 May 2022 18:29:43 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1653496183; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=lt63QTd1m18l9zzlasqnwQ2J7fF9V5RtazXQMO2EUWY=; b=LT2yxGKSXRQy7ovRkEoFzstzJFN2YyHtRO3qMyK+02+Fq5FxHRmJMXMsSNWrevc0uAP/hq q7taID8JbOWKiL9PAj69tbcWvcNWgNbfwuEYKbd4FU/+Gn2QPIF8/vczvtGRlVtBSFoUmJ +uRwkV96MW0h8vC19S9A5j7tIiTTuno= Received: from mimecast-mx02.redhat.com (mx3-rdu2.redhat.com [66.187.233.73]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id us-mta-655-EBzfSPVzPGex4IpqxkFsgg-1; Wed, 25 May 2022 12:29:40 -0400 X-MC-Unique: EBzfSPVzPGex4IpqxkFsgg-1 Received: from smtp.corp.redhat.com (int-mx04.intmail.prod.int.rdu2.redhat.com [10.11.54.4]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mimecast-mx02.redhat.com (Postfix) with ESMTPS id CF1083C1024C; Wed, 25 May 2022 16:29:27 +0000 (UTC) Received: from rh.Home (unknown [10.39.193.216]) by smtp.corp.redhat.com (Postfix) with ESMTP id BC9F92024CD7; Wed, 25 May 2022 16:29:26 +0000 (UTC) From: Kevin Traynor To: Huisong Li Cc: Min Hu , dpdk stable Subject: patch 'net/hns3: fix RSS disable' has been queued to stable release 21.11.2 Date: Wed, 25 May 2022 17:28:15 +0100 Message-Id: <20220525162847.711753-23-ktraynor@redhat.com> In-Reply-To: <20220525162847.711753-1-ktraynor@redhat.com> References: <20220525162847.711753-1-ktraynor@redhat.com> MIME-Version: 1.0 X-Scanned-By: MIMEDefang 2.78 on 10.11.54.4 Authentication-Results: relay.mimecast.com; auth=pass smtp.auth=CUSA124A263 smtp.mailfrom=ktraynor@redhat.com X-Mimecast-Spam-Score: 0 X-Mimecast-Originator: redhat.com Content-Transfer-Encoding: 8bit Content-Type: text/plain; charset="US-ASCII"; x-default=true 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 21.11.2 Note it hasn't been pushed to http://dpdk.org/browse/dpdk-stable yet. It will be pushed if I get no objections before 05/30/22. 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/kevintraynor/dpdk-stable This queued commit can be viewed at: https://github.com/kevintraynor/dpdk-stable/commit/8c193c0b4c2f7a906dc6d311638b139277d605f8 Thanks. Kevin --- >From 8c193c0b4c2f7a906dc6d311638b139277d605f8 Mon Sep 17 00:00:00 2001 From: Huisong Li Date: Thu, 5 May 2022 20:27:05 +0800 Subject: [PATCH] net/hns3: fix RSS disable [ upstream commit 75ccc3f3d7fa06901d5b768448be4dc9f31f550a ] Currently, hns3 PMD disable RSS by resetting redirection table when user set rss_hf to 0 so as to all packets go to queue 0. The implementation may cause following problems: 1) the same type packet may go to different queue on the case of disabling all tuples and partial tuples. The problem is determined by hardware design. 2) affect the configuration of redirection table and user experience. For hns3 hardware, the packets with RSS disabled are always go to the queue corresponding to first entry of the redirection table. Generally, disable RSS should be implemented by disabling all tuples, This patch fix the implementation. Fixes: c37ca66f2b27 ("net/hns3: support RSS") Signed-off-by: Huisong Li Signed-off-by: Min Hu (Connor) --- drivers/net/hns3/hns3_ethdev.c | 1 - drivers/net/hns3/hns3_flow.c | 6 +-- drivers/net/hns3/hns3_rss.c | 97 +++++++--------------------------- 3 files changed, 20 insertions(+), 84 deletions(-) diff --git a/drivers/net/hns3/hns3_ethdev.c b/drivers/net/hns3/hns3_ethdev.c index 80a5aed426..9992b64d4e 100644 --- a/drivers/net/hns3/hns3_ethdev.c +++ b/drivers/net/hns3/hns3_ethdev.c @@ -2028,5 +2028,4 @@ hns3_dev_configure(struct rte_eth_dev *dev) } - /* When RSS is not configured, redirect the packet queue 0 */ if ((uint32_t)mq_mode & RTE_ETH_MQ_RX_RSS_FLAG) { conf->rxmode.offloads |= RTE_ETH_RX_OFFLOAD_RSS_HASH; diff --git a/drivers/net/hns3/hns3_flow.c b/drivers/net/hns3/hns3_flow.c index 5fc80480ba..34fcc3b49e 100644 --- a/drivers/net/hns3/hns3_flow.c +++ b/drivers/net/hns3/hns3_flow.c @@ -1399,11 +1399,7 @@ hns3_disable_rss(struct hns3_hw *hw) int ret; - /* Redirected the redirection table to queue 0 */ - ret = hns3_rss_reset_indir_table(hw); + ret = hns3_set_rss_tuple_by_rss_hf(hw, &hw->rss_info.rss_tuple_sets, 0); if (ret) return ret; - - /* Disable RSS */ - hw->rss_info.conf.types = 0; hw->rss_dis_flag = true; diff --git a/drivers/net/hns3/hns3_rss.c b/drivers/net/hns3/hns3_rss.c index 1493b10f96..1c703952b9 100644 --- a/drivers/net/hns3/hns3_rss.c +++ b/drivers/net/hns3/hns3_rss.c @@ -238,29 +238,4 @@ hns3_rss_set_algo_key(struct hns3_hw *hw, const uint8_t *key) } -/* - * Used to configure the tuple selection for RSS hash input. - */ -static int -hns3_rss_set_input_tuple(struct hns3_hw *hw) -{ - struct hns3_rss_conf *rss_config = &hw->rss_info; - struct hns3_rss_input_tuple_cmd *req; - struct hns3_cmd_desc desc_tuple; - int ret; - - hns3_cmd_setup_basic_desc(&desc_tuple, HNS3_OPC_RSS_INPUT_TUPLE, false); - - req = (struct hns3_rss_input_tuple_cmd *)desc_tuple.data; - - req->tuple_field = - rte_cpu_to_le_64(rss_config->rss_tuple_sets.rss_tuple_fields); - - ret = hns3_cmd_send(hw, &desc_tuple, 1); - if (ret) - hns3_err(hw, "Configure RSS input tuple mode failed %d", ret); - - return ret; -} - /* * rss_indirection_table command function, opcode:0x0D07. @@ -383,4 +358,6 @@ hns3_set_rss_tuple_by_rss_hf(struct hns3_hw *hw, tuple->rss_tuple_fields = rte_le_to_cpu_64(req->tuple_field); + /* Update supported flow types when set tuple success */ + hw->rss_info.conf.types = rss_hf; return 0; @@ -403,5 +380,4 @@ hns3_dev_rss_hash_update(struct rte_eth_dev *dev, struct hns3_hw *hw = &hns->hw; struct hns3_rss_tuple_cfg *tuple = &hw->rss_info.rss_tuple_sets; - struct hns3_rss_conf *rss_cfg = &hw->rss_info; uint8_t key_len = rss_conf->rss_key_len; uint64_t rss_hf = rss_conf->rss_hf; @@ -417,20 +393,4 @@ hns3_dev_rss_hash_update(struct rte_eth_dev *dev, goto conf_err; - if (rss_cfg->conf.types && rss_hf == 0) { - /* Disable RSS, reset indirection table by local variable */ - ret = hns3_rss_reset_indir_table(hw); - if (ret) - goto conf_err; - } else if (rss_hf && rss_cfg->conf.types == 0) { - /* Enable RSS, restore indirection table by hw's config */ - ret = hns3_set_rss_indir_table(hw, rss_cfg->rss_indirection_tbl, - hw->rss_ind_tbl_size); - if (ret) - goto conf_err; - } - - /* Update supported flow types when set tuple success */ - rss_cfg->conf.types = rss_hf; - if (key) { if (key_len != HNS3_RSS_KEY_SIZE) { @@ -698,5 +658,6 @@ hns3_config_rss(struct hns3_adapter *hns) struct hns3_rss_conf *rss_cfg = &hw->rss_info; uint8_t *hash_key = rss_cfg->key; - int ret, ret1; + uint64_t rss_hf; + int ret; enum rte_eth_rx_mq_mode mq_mode = hw->data->dev_conf.rxmode.mq_mode; @@ -714,8 +675,4 @@ hns3_config_rss(struct hns3_adapter *hns) } - /* When RSS is off, redirect the packet queue 0 */ - if (((uint32_t)mq_mode & RTE_ETH_MQ_RX_RSS_FLAG) == 0) - hns3_rss_uninit(hns); - /* Configure RSS hash algorithm and hash key offset */ ret = hns3_rss_set_algo_key(hw, hash_key); @@ -723,40 +680,24 @@ hns3_config_rss(struct hns3_adapter *hns) return ret; - /* Configure the tuple selection for RSS hash input */ - ret = hns3_rss_set_input_tuple(hw); + ret = hns3_set_rss_indir_table(hw, rss_cfg->rss_indirection_tbl, + hw->rss_ind_tbl_size); if (ret) return ret; - /* - * When RSS is off, it doesn't need to configure rss redirection table - * to hardware. - */ - if (((uint32_t)mq_mode & RTE_ETH_MQ_RX_RSS_FLAG)) { - ret = hns3_set_rss_indir_table(hw, rss_cfg->rss_indirection_tbl, - hw->rss_ind_tbl_size); - if (ret) - goto rss_tuple_uninit; - } - ret = hns3_set_rss_tc_mode(hw); if (ret) - goto rss_indir_table_uninit; - - return ret; - -rss_indir_table_uninit: - if (((uint32_t)mq_mode & RTE_ETH_MQ_RX_RSS_FLAG)) { - ret1 = hns3_rss_reset_indir_table(hw); - if (ret1 != 0) - return ret; - } - -rss_tuple_uninit: - hns3_rss_tuple_uninit(hw); - - /* Disable RSS */ - hw->rss_info.conf.types = 0; - - return ret; + return ret; + + /* + * When muli-queue RSS mode flag is not set or unsupported tuples are + * set, disable all tuples. + */ + rss_hf = hw->rss_info.conf.types; + if (!((uint32_t)mq_mode & RTE_ETH_MQ_RX_RSS_FLAG) || + !(rss_hf & HNS3_ETH_RSS_SUPPORT)) + rss_hf = 0; + + return hns3_set_rss_tuple_by_rss_hf(hw, &hw->rss_info.rss_tuple_sets, + rss_hf); } -- 2.34.3 --- Diff of the applied patch vs upstream commit (please double-check if non-empty: --- --- - 2022-05-25 17:26:59.141060472 +0100 +++ 0023-net-hns3-fix-RSS-disable.patch 2022-05-25 17:26:58.578828348 +0100 @@ -1 +1 @@ -From 75ccc3f3d7fa06901d5b768448be4dc9f31f550a Mon Sep 17 00:00:00 2001 +From 8c193c0b4c2f7a906dc6d311638b139277d605f8 Mon Sep 17 00:00:00 2001 @@ -5,0 +6,2 @@ +[ upstream commit 75ccc3f3d7fa06901d5b768448be4dc9f31f550a ] + @@ -20 +21,0 @@ -Cc: stable@dpdk.org @@ -31 +32 @@ -index 1d9b19d83e..4d5a595aab 100644 +index 80a5aed426..9992b64d4e 100644 @@ -34 +35 @@ -@@ -2016,5 +2016,4 @@ hns3_dev_configure(struct rte_eth_dev *dev) +@@ -2028,5 +2028,4 @@ hns3_dev_configure(struct rte_eth_dev *dev) @@ -41 +42 @@ -index aba07aaa6f..feabac9f41 100644 +index 5fc80480ba..34fcc3b49e 100644 @@ -44 +45 @@ -@@ -1447,11 +1447,7 @@ hns3_disable_rss(struct hns3_hw *hw) +@@ -1399,11 +1399,7 @@ hns3_disable_rss(struct hns3_hw *hw)