sync patches ranges from versoin 9 t0 17 from master branch Signed-off-by: speech_white <humin29@huawei.com>
142 lines
5.0 KiB
Diff
142 lines
5.0 KiB
Diff
From 5fcd00f784f9b984bf1f8a084a6be32816585717 Mon Sep 17 00:00:00 2001
|
|
From: Huisong Li <lihuisong@huawei.com>
|
|
Date: Wed, 22 Sep 2021 11:41:51 +0800
|
|
Subject: [PATCH 02/17] net/hns3: fix residual MAC after setting default MAC
|
|
|
|
This problem occurs in the following scenarios:
|
|
1) reset is encountered when the adapter is running.
|
|
2) set a new default MAC address
|
|
|
|
After the above two steps, the old default MAC address should be not
|
|
take effect. But the current behavior is contrary to that. This is due
|
|
to the change of the "default_addr_setted" in hw->mac from 'true' to
|
|
'false' after the reset. As a result, the old MAC address is not removed
|
|
when the new default MAC address is set. This variable controls whether
|
|
to delete the old default MAC address when setting the default MAC
|
|
address. It is only used when the mac_addr_set API is called for the
|
|
first time. In fact, when a unicast MAC address is deleted, if the
|
|
address isn't in the MAC address table, the driver doesn't return
|
|
failure. So this patch remove the redundant and troublesome variables to
|
|
resolve this problem.
|
|
|
|
Fixes: 7d7f9f80bbfb ("net/hns3: support MAC address related operations")
|
|
Cc: stable@dpdk.org
|
|
|
|
Signed-off-by: Huisong Li <lihuisong@huawei.com>
|
|
Signed-off-by: Min Hu (Connor) <humin29@huawei.com>
|
|
---
|
|
drivers/net/hns3/hns3_ethdev.c | 38 ++++++++++------------------------
|
|
drivers/net/hns3/hns3_ethdev.h | 1 -
|
|
2 files changed, 11 insertions(+), 28 deletions(-)
|
|
|
|
diff --git a/drivers/net/hns3/hns3_ethdev.c b/drivers/net/hns3/hns3_ethdev.c
|
|
index 2fb0c466c..d6228601f 100644
|
|
--- a/drivers/net/hns3/hns3_ethdev.c
|
|
+++ b/drivers/net/hns3/hns3_ethdev.c
|
|
@@ -1651,7 +1651,7 @@ hns3_remove_mc_addr_common(struct hns3_hw *hw, struct rte_ether_addr *mac_addr)
|
|
|
|
static int
|
|
hns3_add_mac_addr(struct rte_eth_dev *dev, struct rte_ether_addr *mac_addr,
|
|
- uint32_t idx, __rte_unused uint32_t pool)
|
|
+ __rte_unused uint32_t idx, __rte_unused uint32_t pool)
|
|
{
|
|
struct hns3_hw *hw = HNS3_DEV_PRIVATE_TO_HW(dev->data->dev_private);
|
|
char mac_str[RTE_ETHER_ADDR_FMT_SIZE];
|
|
@@ -1682,8 +1682,6 @@ hns3_add_mac_addr(struct rte_eth_dev *dev, struct rte_ether_addr *mac_addr,
|
|
return ret;
|
|
}
|
|
|
|
- if (idx == 0)
|
|
- hw->mac.default_addr_setted = true;
|
|
rte_spinlock_unlock(&hw->lock);
|
|
|
|
return ret;
|
|
@@ -1748,30 +1746,19 @@ hns3_set_default_mac_addr(struct rte_eth_dev *dev,
|
|
struct hns3_hw *hw = HNS3_DEV_PRIVATE_TO_HW(dev->data->dev_private);
|
|
struct rte_ether_addr *oaddr;
|
|
char mac_str[RTE_ETHER_ADDR_FMT_SIZE];
|
|
- bool default_addr_setted;
|
|
int ret, ret_val;
|
|
|
|
- /*
|
|
- * It has been guaranteed that input parameter named mac_addr is valid
|
|
- * address in the rte layer of DPDK framework.
|
|
- */
|
|
- oaddr = (struct rte_ether_addr *)hw->mac.mac_addr;
|
|
- default_addr_setted = hw->mac.default_addr_setted;
|
|
- if (default_addr_setted && !!rte_is_same_ether_addr(mac_addr, oaddr))
|
|
- return 0;
|
|
-
|
|
rte_spinlock_lock(&hw->lock);
|
|
- if (default_addr_setted) {
|
|
- ret = hns3_remove_uc_addr_common(hw, oaddr);
|
|
- if (ret) {
|
|
- hns3_ether_format_addr(mac_str, RTE_ETHER_ADDR_FMT_SIZE,
|
|
- oaddr);
|
|
- hns3_warn(hw, "Remove old uc mac address(%s) fail: %d",
|
|
- mac_str, ret);
|
|
+ oaddr = (struct rte_ether_addr *)hw->mac.mac_addr;
|
|
+ ret = hns3_remove_uc_addr_common(hw, oaddr);
|
|
+ if (ret) {
|
|
+ hns3_ether_format_addr(mac_str, RTE_ETHER_ADDR_FMT_SIZE,
|
|
+ oaddr);
|
|
+ hns3_warn(hw, "Remove old uc mac address(%s) fail: %d",
|
|
+ mac_str, ret);
|
|
|
|
- rte_spinlock_unlock(&hw->lock);
|
|
- return ret;
|
|
- }
|
|
+ rte_spinlock_unlock(&hw->lock);
|
|
+ return ret;
|
|
}
|
|
|
|
ret = hns3_add_uc_addr_common(hw, mac_addr);
|
|
@@ -1790,7 +1777,6 @@ hns3_set_default_mac_addr(struct rte_eth_dev *dev,
|
|
|
|
rte_ether_addr_copy(mac_addr,
|
|
(struct rte_ether_addr *)hw->mac.mac_addr);
|
|
- hw->mac.default_addr_setted = true;
|
|
rte_spinlock_unlock(&hw->lock);
|
|
|
|
return 0;
|
|
@@ -1811,7 +1797,6 @@ hns3_set_default_mac_addr(struct rte_eth_dev *dev,
|
|
hns3_ether_format_addr(mac_str, RTE_ETHER_ADDR_FMT_SIZE, oaddr);
|
|
hns3_warn(hw, "Failed to restore old uc mac addr(%s): %d",
|
|
mac_str, ret_val);
|
|
- hw->mac.default_addr_setted = false;
|
|
}
|
|
rte_spinlock_unlock(&hw->lock);
|
|
|
|
@@ -3470,7 +3455,6 @@ hns3_get_board_configuration(struct hns3_hw *hw)
|
|
hw->rss_dis_flag = false;
|
|
memcpy(hw->mac.mac_addr, cfg.mac_addr, RTE_ETHER_ADDR_LEN);
|
|
hw->mac.phy_addr = cfg.phy_addr;
|
|
- hw->mac.default_addr_setted = false;
|
|
hw->num_tx_desc = cfg.tqp_desc_num;
|
|
hw->num_rx_desc = cfg.tqp_desc_num;
|
|
hw->dcb_info.num_pg = 1;
|
|
@@ -5928,7 +5912,7 @@ hns3_do_stop(struct hns3_adapter *hns)
|
|
return ret;
|
|
}
|
|
}
|
|
- hw->mac.default_addr_setted = false;
|
|
+
|
|
return 0;
|
|
}
|
|
|
|
diff --git a/drivers/net/hns3/hns3_ethdev.h b/drivers/net/hns3/hns3_ethdev.h
|
|
index ab44894a8..57387e05b 100644
|
|
--- a/drivers/net/hns3/hns3_ethdev.h
|
|
+++ b/drivers/net/hns3/hns3_ethdev.h
|
|
@@ -188,7 +188,6 @@ enum hns3_media_type {
|
|
|
|
struct hns3_mac {
|
|
uint8_t mac_addr[RTE_ETHER_ADDR_LEN];
|
|
- bool default_addr_setted; /* whether default addr(mac_addr) is set */
|
|
uint8_t media_type;
|
|
uint8_t phy_addr;
|
|
uint8_t link_duplex : 1; /* ETH_LINK_[HALF/FULL]_DUPLEX */
|
|
--
|
|
2.23.0
|
|
|