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 6F8A1A04A6; Fri, 7 Jan 2022 11:16:07 +0100 (CET) Received: from [217.70.189.124] (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id A506541160; Fri, 7 Jan 2022 11:15:41 +0100 (CET) Received: from szxga02-in.huawei.com (szxga02-in.huawei.com [45.249.212.188]) by mails.dpdk.org (Postfix) with ESMTP id 512F84014F for ; Fri, 7 Jan 2022 11:15:34 +0100 (CET) Received: from dggeme756-chm.china.huawei.com (unknown [172.30.72.57]) by szxga02-in.huawei.com (SkyGuard) with ESMTP id 4JVfGD652Fz9s2M; Fri, 7 Jan 2022 18:14:28 +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.20; Fri, 7 Jan 2022 18:15:32 +0800 From: "Min Hu (Connor)" To: CC: , Subject: [PATCH 03/15] net/hns3: extract a common API to initialize MAC addrs Date: Fri, 7 Jan 2022 18:15:46 +0800 Message-ID: <20220107101558.39219-4-humin29@huawei.com> X-Mailer: git-send-email 2.33.0 In-Reply-To: <20220107101558.39219-1-humin29@huawei.com> References: <20220107101558.39219-1-humin29@huawei.com> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit Content-Type: text/plain 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 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 code logic to initialize "data->mac_addrs" for PF and VF is similar. This patch extracts a common API to initialize it to improve code maintainabiliy. Signed-off-by: Huisong Li --- drivers/net/hns3/hns3_common.c | 54 +++++++++++++++++++++++++++++++ drivers/net/hns3/hns3_common.h | 1 + drivers/net/hns3/hns3_ethdev.c | 31 +++--------------- drivers/net/hns3/hns3_ethdev_vf.c | 33 +++---------------- 4 files changed, 63 insertions(+), 56 deletions(-) diff --git a/drivers/net/hns3/hns3_common.c b/drivers/net/hns3/hns3_common.c index eac2aa1040..cb581bb25a 100644 --- a/drivers/net/hns3/hns3_common.c +++ b/drivers/net/hns3/hns3_common.c @@ -581,6 +581,60 @@ hns3_remove_mac_addr(struct rte_eth_dev *dev, uint32_t idx) } } +int +hns3_init_mac_addrs(struct rte_eth_dev *dev) +{ + struct hns3_hw *hw = HNS3_DEV_PRIVATE_TO_HW(dev->data->dev_private); + struct hns3_adapter *hns = HNS3_DEV_HW_TO_ADAPTER(hw); + const char *memory_name = hns->is_vf ? "hns3vf-mac" : "hns3-mac"; + uint16_t mac_addrs_capa = hns->is_vf ? HNS3_VF_UC_MACADDR_NUM : + HNS3_UC_MACADDR_NUM; + char mac_str[RTE_ETHER_ADDR_FMT_SIZE]; + struct rte_ether_addr *eth_addr; + + /* Allocate memory for storing MAC addresses */ + dev->data->mac_addrs = rte_zmalloc(memory_name, + sizeof(struct rte_ether_addr) * mac_addrs_capa, + 0); + if (dev->data->mac_addrs == NULL) { + hns3_err(hw, "failed to allocate %zx bytes needed to store MAC addresses", + sizeof(struct rte_ether_addr) * mac_addrs_capa); + return -ENOMEM; + } + + eth_addr = (struct rte_ether_addr *)hw->mac.mac_addr; + if (!hns->is_vf) { + if (!rte_is_valid_assigned_ether_addr(eth_addr)) { + rte_eth_random_addr(hw->mac.mac_addr); + hns3_ether_format_addr(mac_str, RTE_ETHER_ADDR_FMT_SIZE, + (struct rte_ether_addr *)hw->mac.mac_addr); + hns3_warn(hw, "default mac_addr from firmware is an invalid " + "unicast address, using random MAC address %s", + mac_str); + } + } else { + /* + * The hns3 PF ethdev driver in kernel support setting VF MAC + * address on the host by "ip link set ..." command. To avoid + * some incorrect scenes, for example, hns3 VF PMD driver fails + * to receive and send packets after user configure the MAC + * address by using the "ip link set ..." command, hns3 VF PMD + * driver keep the same MAC address strategy as the hns3 kernel + * ethdev driver in the initialization. If user configure a MAC + * address by the ip command for VF device, then hns3 VF PMD + * driver will start with it, otherwise start with a random MAC + * address in the initialization. + */ + if (rte_is_zero_ether_addr(eth_addr)) + rte_eth_random_addr(hw->mac.mac_addr); + } + + rte_ether_addr_copy((struct rte_ether_addr *)hw->mac.mac_addr, + &dev->data->mac_addrs[0]); + + return 0; +} + int hns3_init_ring_with_vector(struct hns3_hw *hw) { diff --git a/drivers/net/hns3/hns3_common.h b/drivers/net/hns3/hns3_common.h index 0dbb1c0413..a9e8a9cccf 100644 --- a/drivers/net/hns3/hns3_common.h +++ b/drivers/net/hns3/hns3_common.h @@ -52,6 +52,7 @@ int hns3_set_mc_mac_addr_list(struct rte_eth_dev *dev, uint32_t nb_mc_addr); void hns3_ether_format_addr(char *buf, uint16_t size, const struct rte_ether_addr *ether_addr); +int hns3_init_mac_addrs(struct rte_eth_dev *dev); int hns3_init_ring_with_vector(struct hns3_hw *hw); int hns3_map_rx_interrupt(struct rte_eth_dev *dev); diff --git a/drivers/net/hns3/hns3_ethdev.c b/drivers/net/hns3/hns3_ethdev.c index 0bd12907d8..44bd7e8b22 100644 --- a/drivers/net/hns3/hns3_ethdev.c +++ b/drivers/net/hns3/hns3_ethdev.c @@ -6623,8 +6623,6 @@ static int hns3_dev_init(struct rte_eth_dev *eth_dev) { struct hns3_adapter *hns = eth_dev->data->dev_private; - char mac_str[RTE_ETHER_ADDR_FMT_SIZE]; - struct rte_ether_addr *eth_addr; struct hns3_hw *hw = &hns->hw; int ret; @@ -6667,30 +6665,9 @@ hns3_dev_init(struct rte_eth_dev *eth_dev) goto err_init_pf; } - /* Allocate memory for storing MAC addresses */ - eth_dev->data->mac_addrs = rte_zmalloc("hns3-mac", - sizeof(struct rte_ether_addr) * - HNS3_UC_MACADDR_NUM, 0); - if (eth_dev->data->mac_addrs == NULL) { - PMD_INIT_LOG(ERR, "Failed to allocate %zx bytes needed " - "to store MAC addresses", - sizeof(struct rte_ether_addr) * - HNS3_UC_MACADDR_NUM); - ret = -ENOMEM; - goto err_rte_zmalloc; - } - - eth_addr = (struct rte_ether_addr *)hw->mac.mac_addr; - if (!rte_is_valid_assigned_ether_addr(eth_addr)) { - rte_eth_random_addr(hw->mac.mac_addr); - hns3_ether_format_addr(mac_str, RTE_ETHER_ADDR_FMT_SIZE, - (struct rte_ether_addr *)hw->mac.mac_addr); - hns3_warn(hw, "default mac_addr from firmware is an invalid " - "unicast address, using random MAC address %s", - mac_str); - } - rte_ether_addr_copy((struct rte_ether_addr *)hw->mac.mac_addr, - ð_dev->data->mac_addrs[0]); + ret = hns3_init_mac_addrs(eth_dev); + if (ret != 0) + goto err_init_mac_addrs; hw->adapter_state = HNS3_NIC_INITIALIZED; @@ -6706,7 +6683,7 @@ hns3_dev_init(struct rte_eth_dev *eth_dev) hns3_info(hw, "hns3 dev initialization successful!"); return 0; -err_rte_zmalloc: +err_init_mac_addrs: hns3_uninit_pf(eth_dev); err_init_pf: diff --git a/drivers/net/hns3/hns3_ethdev_vf.c b/drivers/net/hns3/hns3_ethdev_vf.c index 805abd4543..58b4a107d3 100644 --- a/drivers/net/hns3/hns3_ethdev_vf.c +++ b/drivers/net/hns3/hns3_ethdev_vf.c @@ -2400,34 +2400,9 @@ hns3vf_dev_init(struct rte_eth_dev *eth_dev) goto err_init_vf; } - /* Allocate memory for storing MAC addresses */ - eth_dev->data->mac_addrs = rte_zmalloc("hns3vf-mac", - sizeof(struct rte_ether_addr) * - HNS3_VF_UC_MACADDR_NUM, 0); - if (eth_dev->data->mac_addrs == NULL) { - PMD_INIT_LOG(ERR, "Failed to allocate %zx bytes needed " - "to store MAC addresses", - sizeof(struct rte_ether_addr) * - HNS3_VF_UC_MACADDR_NUM); - ret = -ENOMEM; - goto err_rte_zmalloc; - } - - /* - * The hns3 PF ethdev driver in kernel support setting VF MAC address - * on the host by "ip link set ..." command. To avoid some incorrect - * scenes, for example, hns3 VF PMD fails to receive and send - * packets after user configure the MAC address by using the - * "ip link set ..." command, hns3 VF PMD keep the same MAC - * address strategy as the hns3 kernel ethdev driver in the - * initialization. If user configure a MAC address by the ip command - * for VF device, then hns3 VF PMD will start with it, otherwise - * start with a random MAC address in the initialization. - */ - if (rte_is_zero_ether_addr((struct rte_ether_addr *)hw->mac.mac_addr)) - rte_eth_random_addr(hw->mac.mac_addr); - rte_ether_addr_copy((struct rte_ether_addr *)hw->mac.mac_addr, - ð_dev->data->mac_addrs[0]); + ret = hns3_init_mac_addrs(eth_dev); + if (ret != 0) + goto err_init_mac_addrs; hw->adapter_state = HNS3_NIC_INITIALIZED; @@ -2443,7 +2418,7 @@ hns3vf_dev_init(struct rte_eth_dev *eth_dev) eth_dev); return 0; -err_rte_zmalloc: +err_init_mac_addrs: hns3vf_uninit_vf(eth_dev); err_init_vf: -- 2.33.0