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 5B071427F6 for ; Tue, 21 Mar 2023 10:24:32 +0100 (CET) Received: from mails.dpdk.org (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id A4F0E40A7F; Tue, 21 Mar 2023 10:24:30 +0100 (CET) Received: from szxga01-in.huawei.com (szxga01-in.huawei.com [45.249.212.187]) by mails.dpdk.org (Postfix) with ESMTP id 2F144410F3 for ; Tue, 21 Mar 2023 10:24:28 +0100 (CET) Received: from kwepemm600004.china.huawei.com (unknown [172.30.72.57]) by szxga01-in.huawei.com (SkyGuard) with ESMTP id 4PgmPB6tb2zrT9Z; Tue, 21 Mar 2023 17:23:26 +0800 (CST) Received: from localhost.localdomain (10.28.79.22) by kwepemm600004.china.huawei.com (7.193.23.242) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2507.21; Tue, 21 Mar 2023 17:24:26 +0800 From: Huisong Li To: , CC: , , , Subject: [PATCH 21.11 10/17] net/hns3: separate setting RSS types Date: Tue, 21 Mar 2023 17:22:59 +0800 Message-ID: <20230321092306.16918-11-lihuisong@huawei.com> X-Mailer: git-send-email 2.22.0 In-Reply-To: <20230321092306.16918-1-lihuisong@huawei.com> References: <20230321092306.16918-1-lihuisong@huawei.com> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit Content-Type: text/plain X-Originating-IP: [10.28.79.22] X-ClientProxiedBy: dggems702-chm.china.huawei.com (10.3.19.179) To kwepemm600004.china.huawei.com (7.193.23.242) X-CFilter-Loop: Reflected 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 [ upstream commit 791e56935e488b8154a83daaf3952e1901ed7552 ] 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. 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 2ead9b3a48..512ad6066d 100644 --- a/drivers/net/hns3/hns3_flow.c +++ b/drivers/net/hns3/hns3_flow.c @@ -1386,6 +1386,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; } @@ -1534,7 +1535,7 @@ hns3_config_rss_filter(struct hns3_hw *hw, const struct hns3_rss_conf *conf) /* 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 bc78bcbb94..f140a6a2ca 100644 --- a/drivers/net/hns3/hns3_rss.c +++ b/drivers/net/hns3/hns3_rss.c @@ -628,9 +628,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; } @@ -648,7 +645,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; @@ -673,6 +670,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; @@ -1030,6 +1028,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)); @@ -1067,15 +1066,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; } /* @@ -1093,5 +1099,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 7f47cc243c..48c535ed3f 100644 --- a/drivers/net/hns3/hns3_rss.h +++ b/drivers/net/hns3/hns3_rss.h @@ -44,6 +44,7 @@ struct hns3_rss_tuple_cfg { 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