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 28119A034F; Mon, 11 Oct 2021 11:29:58 +0200 (CEST) Received: from [217.70.189.124] (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id DF790410EA; Mon, 11 Oct 2021 11:29:57 +0200 (CEST) Received: from szxga02-in.huawei.com (szxga02-in.huawei.com [45.249.212.188]) by mails.dpdk.org (Postfix) with ESMTP id 273ED410DF for ; Mon, 11 Oct 2021 11:29:56 +0200 (CEST) Received: from dggeme756-chm.china.huawei.com (unknown [172.30.72.54]) by szxga02-in.huawei.com (SkyGuard) with ESMTP id 4HSYLJ0vXkzRftM; Mon, 11 Oct 2021 17:25: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.8; Mon, 11 Oct 2021 17:29:54 +0800 From: "Min Hu (Connor)" To: CC: , Date: Mon, 11 Oct 2021 17:28:11 +0800 Message-ID: <20211011092811.55172-1-humin29@huawei.com> X-Mailer: git-send-email 2.33.0 In-Reply-To: <20210922033630.41130-1-humin29@huawei.com> References: <20210922033630.41130-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 Subject: [dpdk-dev] [PATCH v2] ethdev: fix one MAC address occupies two index in mac addrs 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 The dev->data->mac_addrs[0] will be changed to a new MAC address when applications modify the default MAC address by rte_eth_dev_default_mac_addr_set() API. However, If the new default MAC address has been added as a non-default MAC address by rte_eth_dev_mac_addr_add() API, the rte_eth_dev_default_mac_addr_set() API doesn't remove it from dev->data->mac_addrs[]. As a result, one MAC address occupies two index capacities in dev->data->mac_addrs[]. This patch adds the logic of removing MAC addresses for this scenario. Fixes: 854d8ad4ef68 ("ethdev: add default mac address modifier") Cc: stable@dpdk.org Signed-off-by: Huisong Li Signed-off-by: Min Hu (Connor) --- v2: * fixed commit log. --- lib/ethdev/rte_ethdev.c | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/lib/ethdev/rte_ethdev.c b/lib/ethdev/rte_ethdev.c index 028907bc4b..7faff17d9a 100644 --- a/lib/ethdev/rte_ethdev.c +++ b/lib/ethdev/rte_ethdev.c @@ -4340,6 +4340,7 @@ int rte_eth_dev_default_mac_addr_set(uint16_t port_id, struct rte_ether_addr *addr) { struct rte_eth_dev *dev; + int index; int ret; RTE_ETH_VALID_PORTID_OR_ERR_RET(port_id, -ENODEV); @@ -4361,6 +4362,20 @@ rte_eth_dev_default_mac_addr_set(uint16_t port_id, struct rte_ether_addr *addr) if (ret < 0) return ret; + /* + * If the address has been added as a non-default MAC address by + * rte_eth_dev_mac_addr_add API, it should be removed from + * dev->data->mac_addrs[]. + */ + index = eth_dev_get_mac_addr_index(port_id, addr); + if (index > 0) { + /* remove address in NIC data structure */ + rte_ether_addr_copy(&null_mac_addr, + &dev->data->mac_addrs[index]); + /* reset pool bitmap */ + dev->data->mac_pool_sel[index] = 0; + } + /* Update default address in NIC data structure */ rte_ether_addr_copy(addr, &dev->data->mac_addrs[0]); -- 2.33.0