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 8288941E3A; Fri, 10 Mar 2023 10:37:22 +0100 (CET) Received: from mails.dpdk.org (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 9689E42D48; Fri, 10 Mar 2023 10:36:39 +0100 (CET) Received: from szxga03-in.huawei.com (szxga03-in.huawei.com [45.249.212.189]) by mails.dpdk.org (Postfix) with ESMTP id 9462B42B8B; Fri, 10 Mar 2023 10:36:34 +0100 (CET) Received: from kwepemi500017.china.huawei.com (unknown [172.30.72.55]) by szxga03-in.huawei.com (SkyGuard) with ESMTP id 4PY1CC41CwzKmXw; Fri, 10 Mar 2023 17:36:23 +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 08/16] net/hns3: separate the setting of redirection table Date: Fri, 10 Mar 2023 17:35:10 +0800 Message-ID: <20230310093518.5198-9-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 redirection table 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 to rss_info::rss_indirection_tbl in hns3_hw structure so as to it can be restored when reset is triggered. While rte_flow API no need to use this field to save, they has a global RSS flow list to maintain all rules which can be used to restore the table during the reset phase. Cc: stable@dpdk.org Signed-off-by: Huisong Li Signed-off-by: Dongdong Liu --- drivers/net/hns3/hns3_flow.c | 2 -- drivers/net/hns3/hns3_rss.c | 21 +++++++++++++-------- 2 files changed, 13 insertions(+), 10 deletions(-) diff --git a/drivers/net/hns3/hns3_flow.c b/drivers/net/hns3/hns3_flow.c index 2faeb9ca52..d5db09a263 100644 --- a/drivers/net/hns3/hns3_flow.c +++ b/drivers/net/hns3/hns3_flow.c @@ -1519,8 +1519,6 @@ hns3_update_indir_table(struct hns3_hw *hw, uint32_t i; /* Fill in redirection table */ - memcpy(indir_tbl, hw->rss_info.rss_indirection_tbl, - sizeof(hw->rss_info.rss_indirection_tbl)); for (i = 0, j = 0; i < hw->rss_ind_tbl_size; i++, j++) { j %= num; if (conf->queue[j] >= hw->alloc_rss_size) { diff --git a/drivers/net/hns3/hns3_rss.c b/drivers/net/hns3/hns3_rss.c index be717b7641..037914ef04 100644 --- a/drivers/net/hns3/hns3_rss.c +++ b/drivers/net/hns3/hns3_rss.c @@ -472,10 +472,6 @@ hns3_set_rss_indir_table(struct hns3_hw *hw, uint16_t *indir, uint16_t size) } } - /* Update redirection table of hw */ - memcpy(hw->rss_info.rss_indirection_tbl, indir, - sizeof(uint16_t) * size); - return 0; } @@ -541,8 +537,11 @@ hns3_rss_reset_indir_table(struct hns3_hw *hw) } ret = hns3_set_rss_indir_table(hw, lut, hw->rss_ind_tbl_size); - if (ret) - hns3_err(hw, "RSS uninit indir table failed: %d", ret); + if (ret != 0) + hns3_err(hw, "RSS uninit indir table failed, ret = %d.", ret); + else + memcpy(hw->rss_info.rss_indirection_tbl, lut, + sizeof(uint16_t) * hw->rss_ind_tbl_size); rte_free(lut); return ret; @@ -854,12 +853,12 @@ hns3_dev_rss_reta_update(struct rte_eth_dev *dev, idx = i / RTE_ETH_RETA_GROUP_SIZE; shift = i % RTE_ETH_RETA_GROUP_SIZE; if (reta_conf[idx].reta[shift] >= hw->alloc_rss_size) { - rte_spinlock_unlock(&hw->lock); hns3_err(hw, "queue id(%u) set to redirection table " "exceeds queue number(%u) allocated to a TC", reta_conf[idx].reta[shift], hw->alloc_rss_size); - return -EINVAL; + ret = -EINVAL; + goto out; } if (reta_conf[idx].mask & (1ULL << shift)) @@ -868,7 +867,13 @@ hns3_dev_rss_reta_update(struct rte_eth_dev *dev, ret = hns3_set_rss_indir_table(hw, indirection_tbl, hw->rss_ind_tbl_size); + if (ret != 0) + goto out; + memcpy(rss_cfg->rss_indirection_tbl, indirection_tbl, + sizeof(uint16_t) * hw->rss_ind_tbl_size); + +out: rte_spinlock_unlock(&hw->lock); return ret; } -- 2.22.0