From patchwork Fri Oct 22 09:20:01 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: "humin (Q)" X-Patchwork-Id: 102653 X-Patchwork-Delegate: ferruh.yigit@amd.com Return-Path: X-Original-To: patchwork@inbox.dpdk.org Delivered-To: patchwork@inbox.dpdk.org Received: from mails.dpdk.org (mails.dpdk.org [217.70.189.124]) by inbox.dpdk.org (Postfix) with ESMTP id 8890BA0C43; Fri, 22 Oct 2021 11:23:22 +0200 (CEST) Received: from [217.70.189.124] (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id C6EC7411F2; Fri, 22 Oct 2021 11:22:17 +0200 (CEST) Received: from szxga08-in.huawei.com (szxga08-in.huawei.com [45.249.212.255]) by mails.dpdk.org (Postfix) with ESMTP id 0327941181 for ; Fri, 22 Oct 2021 11:22:00 +0200 (CEST) Received: from dggeme756-chm.china.huawei.com (unknown [172.30.72.55]) by szxga08-in.huawei.com (SkyGuard) with ESMTP id 4HbJj51Dwpz1DHnH; Fri, 22 Oct 2021 17:20:09 +0800 (CST) Received: from localhost.localdomain (10.69.192.56) by dggeme756-chm.china.huawei.com (10.3.19.102) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256_P256) id 15.1.2308.15; Fri, 22 Oct 2021 17:21:57 +0800 From: "Min Hu (Connor)" To: CC: , Date: Fri, 22 Oct 2021 17:20:01 +0800 Message-ID: <20211022092006.60959-11-humin29@huawei.com> X-Mailer: git-send-email 2.33.0 In-Reply-To: <20211022092006.60959-1-humin29@huawei.com> References: <20211022092006.60959-1-humin29@huawei.com> MIME-Version: 1.0 X-Originating-IP: [10.69.192.56] X-ClientProxiedBy: dggems706-chm.china.huawei.com (10.3.19.183) To dggeme756-chm.china.huawei.com (10.3.19.102) X-CFilter-Loop: Reflected Subject: [dpdk-dev] [PATCH 10/14] net/hns3: uniform to config all MAC and MC address 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 Sender: "dev" From: Huisong Li Currently, the interface logic for adding and deleting all MAC address and multicast address in PF and VF driver is the same. This patch extracts two common interfaces to configure them separately. Signed-off-by: Huisong Li Signed-off-by: Min Hu (Connor) --- drivers/net/hns3/hns3_ethdev.c | 32 ++++++------- drivers/net/hns3/hns3_ethdev.h | 2 + drivers/net/hns3/hns3_ethdev_vf.c | 77 +++---------------------------- 3 files changed, 25 insertions(+), 86 deletions(-) diff --git a/drivers/net/hns3/hns3_ethdev.c b/drivers/net/hns3/hns3_ethdev.c index dcdbb962eb..0431091f49 100644 --- a/drivers/net/hns3/hns3_ethdev.c +++ b/drivers/net/hns3/hns3_ethdev.c @@ -1790,17 +1790,20 @@ hns3_set_default_mac_addr(struct rte_eth_dev *dev, return ret; } -static int +int hns3_configure_all_mac_addr(struct hns3_adapter *hns, bool del) { char mac_str[RTE_ETHER_ADDR_FMT_SIZE]; struct hns3_hw *hw = &hns->hw; + struct hns3_hw_ops *ops = &hw->ops; struct rte_ether_addr *addr; - int err = 0; - int ret; + uint16_t mac_addrs_capa; + int ret = 0; int i; - for (i = 0; i < HNS3_UC_MACADDR_NUM; i++) { + mac_addrs_capa = + hns->is_vf ? HNS3_VF_UC_MACADDR_NUM : HNS3_UC_MACADDR_NUM; + for (i = 0; i < mac_addrs_capa; i++) { addr = &hw->data->mac_addrs[i]; if (rte_is_zero_ether_addr(addr)) continue; @@ -1812,15 +1815,14 @@ hns3_configure_all_mac_addr(struct hns3_adapter *hns, bool del) ops->add_uc_mac_addr(hw, addr); if (ret) { - err = ret; hns3_ether_format_addr(mac_str, RTE_ETHER_ADDR_FMT_SIZE, - addr); - hns3_err(hw, "failed to %s mac addr(%s) index:%d " - "ret = %d.", del ? "remove" : "restore", - mac_str, i, ret); + addr); + hns3_err(hw, "failed to %s mac addr(%s) index:%d ret = %d.", + del ? "remove" : "restore", mac_str, i, ret); } } - return err; + + return ret; } static void @@ -2151,14 +2153,13 @@ hns3_set_mc_mac_addr_list(struct rte_eth_dev *dev, return 0; } -static int +int hns3_configure_all_mc_mac_addr(struct hns3_adapter *hns, bool del) { char mac_str[RTE_ETHER_ADDR_FMT_SIZE]; struct hns3_hw *hw = &hns->hw; struct rte_ether_addr *addr; - int err = 0; - int ret; + int ret = 0; int i; for (i = 0; i < hw->mc_addrs_num; i++) { @@ -2170,14 +2171,13 @@ hns3_configure_all_mc_mac_addr(struct hns3_adapter *hns, bool del) else ret = hw->ops.add_mc_mac_addr(hw, addr); if (ret) { - err = ret; hns3_ether_format_addr(mac_str, RTE_ETHER_ADDR_FMT_SIZE, addr); - hns3_dbg(hw, "%s mc mac addr: %s failed for pf: ret = %d", + hns3_dbg(hw, "failed to %s mc mac addr: %s ret = %d", del ? "Remove" : "Restore", mac_str, ret); } } - return err; + return ret; } static int diff --git a/drivers/net/hns3/hns3_ethdev.h b/drivers/net/hns3/hns3_ethdev.h index 9d0a060720..0a58db5bc6 100644 --- a/drivers/net/hns3/hns3_ethdev.h +++ b/drivers/net/hns3/hns3_ethdev.h @@ -1064,6 +1064,8 @@ void hns3vf_update_push_lsc_cap(struct hns3_hw *hw, bool supported); bool hns3_find_duplicate_mc_addr(struct hns3_hw *hw, struct rte_ether_addr *mc_addr); +int hns3_configure_all_mc_mac_addr(struct hns3_adapter *hns, bool del); +int hns3_configure_all_mac_addr(struct hns3_adapter *hns, bool del); int hns3_restore_ptp(struct hns3_adapter *hns); int hns3_mbuf_dyn_rx_timestamp_register(struct rte_eth_dev *dev, diff --git a/drivers/net/hns3/hns3_ethdev_vf.c b/drivers/net/hns3/hns3_ethdev_vf.c index 616b3ed6db..7034434530 100644 --- a/drivers/net/hns3/hns3_ethdev_vf.c +++ b/drivers/net/hns3/hns3_ethdev_vf.c @@ -323,40 +323,6 @@ hns3vf_set_default_mac_addr(struct rte_eth_dev *dev, return ret; } -static int -hns3vf_configure_mac_addr(struct hns3_adapter *hns, bool del) -{ - char mac_str[RTE_ETHER_ADDR_FMT_SIZE]; - struct hns3_hw *hw = &hns->hw; - struct hns3_hw_ops *ops = &hw->ops; - struct rte_ether_addr *addr; - int err = 0; - int ret; - int i; - - for (i = 0; i < HNS3_VF_UC_MACADDR_NUM; i++) { - addr = &hw->data->mac_addrs[i]; - if (rte_is_zero_ether_addr(addr)) - continue; - if (rte_is_multicast_ether_addr(addr)) - ret = del ? ops->del_mc_mac_addr(hw, addr) : - ops->add_mc_mac_addr(hw, addr); - else - ret = del ? ops->del_uc_mac_addr(hw, addr) : - ops->add_uc_mac_addr(hw, addr); - - if (ret) { - err = ret; - hns3_ether_format_addr(mac_str, RTE_ETHER_ADDR_FMT_SIZE, - addr); - hns3_err(hw, "failed to %s mac addr(%s) index:%d " - "ret = %d.", del ? "remove" : "restore", - mac_str, i, ret); - } - } - return err; -} - static int hns3vf_add_mc_mac_addr(struct hns3_hw *hw, struct rte_ether_addr *mac_addr) @@ -511,35 +477,6 @@ hns3vf_set_mc_mac_addr_list(struct rte_eth_dev *dev, return 0; } -static int -hns3vf_configure_all_mc_mac_addr(struct hns3_adapter *hns, bool del) -{ - char mac_str[RTE_ETHER_ADDR_FMT_SIZE]; - struct hns3_hw *hw = &hns->hw; - struct rte_ether_addr *addr; - int err = 0; - int ret; - int i; - - for (i = 0; i < hw->mc_addrs_num; i++) { - addr = &hw->mc_addrs[i]; - if (!rte_is_multicast_ether_addr(addr)) - continue; - if (del) - ret = hw->ops.del_mc_mac_addr(hw, addr); - else - ret = hw->ops.add_mc_mac_addr(hw, addr); - if (ret) { - err = ret; - hns3_ether_format_addr(mac_str, RTE_ETHER_ADDR_FMT_SIZE, - addr); - hns3_err(hw, "Failed to %s mc mac addr: %s for vf: %d", - del ? "Remove" : "Restore", mac_str, ret); - } - } - return err; -} - static int hns3vf_set_promisc_mode(struct hns3_hw *hw, bool en_bc_pmc, bool en_uc_pmc, bool en_mc_pmc) @@ -2048,7 +1985,7 @@ hns3vf_do_stop(struct hns3_adapter *hns) hns3_dev_release_mbufs(hns); if (__atomic_load_n(&hw->reset.disable_cmd, __ATOMIC_RELAXED) == 0) { - hns3vf_configure_mac_addr(hns, true); + hns3_configure_all_mac_addr(hns, true); ret = hns3_reset_all_tqps(hns); if (ret) { hns3_err(hw, "failed to reset all queues ret = %d", @@ -2143,7 +2080,7 @@ hns3vf_dev_close(struct rte_eth_dev *eth_dev) hns3_reset_abort(hns); hw->adapter_state = HNS3_NIC_CLOSED; rte_eal_alarm_cancel(hns3vf_keep_alive_handler, eth_dev); - hns3vf_configure_all_mc_mac_addr(hns, true); + hns3_configure_all_mc_mac_addr(hns, true); hns3vf_remove_all_vlan_table(hns); hns3vf_uninit_vf(eth_dev); hns3_free_all_queues(eth_dev); @@ -2572,7 +2509,7 @@ hns3vf_stop_service(struct hns3_adapter *hns) * required to delete the entries. */ if (__atomic_load_n(&hw->reset.disable_cmd, __ATOMIC_RELAXED) == 0) - hns3vf_configure_all_mc_mac_addr(hns, true); + hns3_configure_all_mc_mac_addr(hns, true); rte_spinlock_unlock(&hw->lock); return 0; @@ -2658,11 +2595,11 @@ hns3vf_restore_conf(struct hns3_adapter *hns) if (ret) return ret; - ret = hns3vf_configure_mac_addr(hns, false); + ret = hns3_configure_all_mac_addr(hns, false); if (ret) return ret; - ret = hns3vf_configure_all_mc_mac_addr(hns, false); + ret = hns3_configure_all_mc_mac_addr(hns, false); if (ret) goto err_mc_mac; @@ -2703,9 +2640,9 @@ hns3vf_restore_conf(struct hns3_adapter *hns) return 0; err_vlan_table: - hns3vf_configure_all_mc_mac_addr(hns, true); + hns3_configure_all_mc_mac_addr(hns, true); err_mc_mac: - hns3vf_configure_mac_addr(hns, true); + hns3_configure_all_mac_addr(hns, true); return ret; }