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 2D0C541E3A; Fri, 10 Mar 2023 10:37:29 +0100 (CET) Received: from mails.dpdk.org (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 042B842D59; Fri, 10 Mar 2023 10:36:41 +0100 (CET) Received: from szxga08-in.huawei.com (szxga08-in.huawei.com [45.249.212.255]) by mails.dpdk.org (Postfix) with ESMTP id AC38D42BFE; Fri, 10 Mar 2023 10:36:34 +0100 (CET) Received: from kwepemi500017.china.huawei.com (unknown [172.30.72.54]) by szxga08-in.huawei.com (SkyGuard) with ESMTP id 4PY18658M3z16PL3; Fri, 10 Mar 2023 17:33:42 +0800 (CST) Received: from localhost.localdomain (10.28.79.22) by kwepemi500017.china.huawei.com (7.221.188.110) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2507.21; Fri, 10 Mar 2023 17:36:32 +0800 From: Dongdong Liu To: , , , CC: , , , Subject: [PATCH 09/16] net/hns3: separate the setting of RSS types Date: Fri, 10 Mar 2023 17:35:11 +0800 Message-ID: <20230310093518.5198-10-liudongdong3@huawei.com> X-Mailer: git-send-email 2.22.0 In-Reply-To: <20230310093518.5198-1-liudongdong3@huawei.com> References: <20230310093518.5198-1-liudongdong3@huawei.com> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit Content-Type: text/plain X-Originating-IP: [10.28.79.22] X-ClientProxiedBy: dggems706-chm.china.huawei.com (10.3.19.183) To kwepemi500017.china.huawei.com (7.221.188.110) X-CFilter-Loop: Reflected X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: DPDK patches and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dev-bounces@dpdk.org From: Huisong Li The settings of RSS types comes from the ethdev ops (like, dev_configure and rss_hash_update) and rte_flow API. For the ethdev ops, driver has to save it so as to it can be restored when reset is triggered. While rte_flow API no need to maintain this field, it can be restored by the saved rule. Cc: stable@dpdk.org Signed-off-by: Huisong Li Signed-off-by: Dongdong Liu --- drivers/net/hns3/hns3_flow.c | 3 ++- drivers/net/hns3/hns3_rss.c | 22 ++++++++++++++-------- drivers/net/hns3/hns3_rss.h | 1 + 3 files changed, 17 insertions(+), 9 deletions(-) diff --git a/drivers/net/hns3/hns3_flow.c b/drivers/net/hns3/hns3_flow.c index d5db09a263..21e00e515e 100644 --- a/drivers/net/hns3/hns3_flow.c +++ b/drivers/net/hns3/hns3_flow.c @@ -1433,6 +1433,7 @@ hns3_disable_rss(struct hns3_hw *hw) ret = hns3_set_rss_tuple_by_rss_hf(hw, 0); if (ret) return ret; + hw->rss_info.rss_hf = 0; return 0; } @@ -1580,7 +1581,7 @@ hns3_config_rss_filter(struct hns3_hw *hw, /* Filter the unsupported flow types */ flow_types = conf->conf.types ? rss_flow_conf.types & HNS3_ETH_RSS_SUPPORT : - hw->rss_info.conf.types; + hw->rss_info.rss_hf; if (flow_types != rss_flow_conf.types) hns3_warn(hw, "modified RSS types based on hardware support," " requested:0x%" PRIx64 " configured:0x%" PRIx64, diff --git a/drivers/net/hns3/hns3_rss.c b/drivers/net/hns3/hns3_rss.c index 037914ef04..2ef267aac6 100644 --- a/drivers/net/hns3/hns3_rss.c +++ b/drivers/net/hns3/hns3_rss.c @@ -627,9 +627,6 @@ hns3_set_rss_tuple_by_rss_hf(struct hns3_hw *hw, uint64_t rss_hf) return ret; } - /* Update supported flow types when set tuple success */ - hw->rss_info.conf.types = rss_hf; - return 0; } @@ -647,7 +644,7 @@ hns3_dev_rss_hash_update(struct rte_eth_dev *dev, struct rte_eth_rss_conf *rss_conf) { struct hns3_hw *hw = HNS3_DEV_PRIVATE_TO_HW(dev->data->dev_private); - uint64_t rss_hf_bk = hw->rss_info.conf.types; + uint64_t rss_hf_bk = hw->rss_info.rss_hf; uint8_t key_len = rss_conf->rss_key_len; uint64_t rss_hf = rss_conf->rss_hf; uint8_t *key = rss_conf->rss_key; @@ -672,6 +669,7 @@ hns3_dev_rss_hash_update(struct rte_eth_dev *dev, /* Update the shadow RSS key with user specified */ memcpy(hw->rss_info.key, key, hw->rss_key_size); } + hw->rss_info.rss_hf = rss_hf; rte_spinlock_unlock(&hw->lock); return 0; @@ -1029,6 +1027,7 @@ hns3_rss_set_default_args(struct hns3_hw *hw) /* Default hash algorithm */ rss_cfg->hash_algo = HNS3_RSS_HASH_ALGO_TOEPLITZ; + hw->rss_info.rss_hf = 0; memcpy(rss_cfg->key, hns3_hash_key, RTE_MIN(sizeof(hns3_hash_key), hw->rss_key_size)); @@ -1066,15 +1065,22 @@ hns3_config_rss(struct hns3_adapter *hns) return ret; /* - * When muli-queue RSS mode flag is not set or unsupported tuples are + * When multi-queue RSS mode flag is not set or unsupported tuples are * set, disable all tuples. */ - rss_hf = hw->rss_info.conf.types; + rss_hf = hw->rss_info.rss_hf; 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, rss_hf); + ret = hns3_set_rss_tuple_by_rss_hf(hw, rss_hf); + if (ret != 0) { + hns3_err(hw, "set RSS tuples failed, ret = %d.", ret); + return ret; + } + hw->rss_info.rss_hf = rss_hf; + + return 0; } /* @@ -1092,5 +1098,5 @@ hns3_rss_uninit(struct hns3_adapter *hns) return; /* Disable RSS */ - hw->rss_info.conf.types = 0; + hw->rss_info.rss_hf = 0; } diff --git a/drivers/net/hns3/hns3_rss.h b/drivers/net/hns3/hns3_rss.h index 6e679b709b..21b90789d0 100644 --- a/drivers/net/hns3/hns3_rss.h +++ b/drivers/net/hns3/hns3_rss.h @@ -41,6 +41,7 @@ struct hns3_rss_conf { /* RSS parameters :algorithm, flow_types, key, queue */ struct rte_flow_action_rss conf; + uint64_t rss_hf; 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 */ -- 2.22.0