patch 'net/hns3: fix flushing multicast MAC address' has been queued to stable release 20.11.10

luca.boccassi at gmail.com luca.boccassi at gmail.com
Thu Oct 19 01:58:55 CEST 2023


Hi,

FYI, your patch has been queued to stable release 20.11.10

Note it hasn't been pushed to http://dpdk.org/browse/dpdk-stable yet.
It will be pushed if I get no objections before 10/21/23. So please
shout if anyone has objections.

Also note that after the patch there's a diff of the upstream commit vs the
patch applied to the branch. This will indicate if there was any rebasing
needed to apply to the stable branch. If there were code changes for rebasing
(ie: not only metadata diffs), please double check that the rebase was
correctly done.

Queued patches are on a temporary branch at:
https://github.com/bluca/dpdk-stable

This queued commit can be viewed at:
https://github.com/bluca/dpdk-stable/commit/04a3f8de6cc6d01e8d9223814afe0f53c96b2542

Thanks.

Luca Boccassi

---
>From 04a3f8de6cc6d01e8d9223814afe0f53c96b2542 Mon Sep 17 00:00:00 2001
From: Dengdui Huang <huangdengdui at huawei.com>
Date: Sat, 5 Aug 2023 16:36:25 +0800
Subject: [PATCH] net/hns3: fix flushing multicast MAC address

[ upstream commit 49d1ab205b033b6131fb895b5e4d9ebc14081e51 ]

According rte_eth_dev_set_mc_addr_list() API definition,
support flush multicast MAC address if mc_addr_set is NULL
or nb_mc_addr is zero.

Fixes: 7d7f9f80bbfb ("net/hns3: support MAC address related operations")

Signed-off-by: Dengdui Huang <huangdengdui at huawei.com>
Signed-off-by: Dongdong Liu <liudongdong3 at huawei.com>
---
 drivers/net/hns3/hns3_ethdev.c | 68 +++++++++++++++++++---------------
 1 file changed, 39 insertions(+), 29 deletions(-)

diff --git a/drivers/net/hns3/hns3_ethdev.c b/drivers/net/hns3/hns3_ethdev.c
index 08e2ae53db..b898c7b5a3 100644
--- a/drivers/net/hns3/hns3_ethdev.c
+++ b/drivers/net/hns3/hns3_ethdev.c
@@ -2037,12 +2037,42 @@ hns3_set_mc_addr_calc_addr(struct hns3_hw *hw,
 	*rm_addr_num = rm_num;
 }
 
+static 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 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 = hns3_remove_mc_addr(hw, addr);
+		else
+			ret = hns3_add_mc_addr(hw, addr);
+		if (ret) {
+			err = ret;
+			rte_ether_format_addr(mac_str, RTE_ETHER_ADDR_FMT_SIZE,
+					      addr);
+			hns3_dbg(hw, "%s mc mac addr: %s failed for pf: ret = %d",
+				 del ? "Remove" : "Restore", mac_str, ret);
+		}
+	}
+	return err;
+}
+
 static int
 hns3_set_mc_mac_addr_list(struct rte_eth_dev *dev,
 			  struct rte_ether_addr *mc_addr_set,
 			  uint32_t nb_mc_addr)
 {
 	struct hns3_hw *hw = HNS3_DEV_PRIVATE_TO_HW(dev->data->dev_private);
+	struct hns3_adapter *hns = HNS3_DEV_HW_TO_ADAPTER(hw);
 	struct rte_ether_addr reserved_addr_list[HNS3_MC_MACADDR_NUM];
 	struct rte_ether_addr add_addr_list[HNS3_MC_MACADDR_NUM];
 	struct rte_ether_addr rm_addr_list[HNS3_MC_MACADDR_NUM];
@@ -2055,6 +2085,15 @@ hns3_set_mc_mac_addr_list(struct rte_eth_dev *dev,
 	int ret;
 	int i;
 
+	if (mc_addr_set == NULL || nb_mc_addr == 0) {
+		rte_spinlock_lock(&hw->lock);
+		ret = hns3_configure_all_mc_mac_addr(hns, true);
+		if (ret == 0)
+			hw->mc_addrs_num = 0;
+		rte_spinlock_unlock(&hw->lock);
+		return ret;
+	}
+
 	/* Check if input parameters are valid */
 	ret = hns3_set_mc_addr_chk_param(hw, mc_addr_set, nb_mc_addr);
 	if (ret)
@@ -2102,35 +2141,6 @@ hns3_set_mc_mac_addr_list(struct rte_eth_dev *dev,
 	return 0;
 }
 
-static 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 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 = hns3_remove_mc_addr(hw, addr);
-		else
-			ret = hns3_add_mc_addr(hw, addr);
-		if (ret) {
-			err = ret;
-			rte_ether_format_addr(mac_str, RTE_ETHER_ADDR_FMT_SIZE,
-					      addr);
-			hns3_dbg(hw, "%s mc mac addr: %s failed for pf: ret = %d",
-				 del ? "Remove" : "Restore", mac_str, ret);
-		}
-	}
-	return err;
-}
-
 static int
 hns3_check_mq_mode(struct rte_eth_dev *dev)
 {
-- 
2.39.2

---
  Diff of the applied patch vs upstream commit (please double-check if non-empty:
---
--- -	2023-10-19 00:28:56.559140958 +0100
+++ 0006-net-hns3-fix-flushing-multicast-MAC-address.patch	2023-10-19 00:28:56.193803887 +0100
@@ -1 +1 @@
-From 49d1ab205b033b6131fb895b5e4d9ebc14081e51 Mon Sep 17 00:00:00 2001
+From 04a3f8de6cc6d01e8d9223814afe0f53c96b2542 Mon Sep 17 00:00:00 2001
@@ -5,0 +6,2 @@
+[ upstream commit 49d1ab205b033b6131fb895b5e4d9ebc14081e51 ]
+
@@ -11 +12,0 @@
-Cc: stable at dpdk.org
@@ -16,2 +17,2 @@
- drivers/net/hns3/hns3_common.c | 10 ++++++++++
- 1 file changed, 10 insertions(+)
+ drivers/net/hns3/hns3_ethdev.c | 68 +++++++++++++++++++---------------
+ 1 file changed, 39 insertions(+), 29 deletions(-)
@@ -19,5 +20,40 @@
-diff --git a/drivers/net/hns3/hns3_common.c b/drivers/net/hns3/hns3_common.c
-index 043c7673b4..c4d47f43fe 100644
---- a/drivers/net/hns3/hns3_common.c
-+++ b/drivers/net/hns3/hns3_common.c
-@@ -444,6 +444,7 @@ hns3_set_mc_mac_addr_list(struct rte_eth_dev *dev,
+diff --git a/drivers/net/hns3/hns3_ethdev.c b/drivers/net/hns3/hns3_ethdev.c
+index 08e2ae53db..b898c7b5a3 100644
+--- a/drivers/net/hns3/hns3_ethdev.c
++++ b/drivers/net/hns3/hns3_ethdev.c
+@@ -2037,12 +2037,42 @@ hns3_set_mc_addr_calc_addr(struct hns3_hw *hw,
+ 	*rm_addr_num = rm_num;
+ }
+ 
++static 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 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 = hns3_remove_mc_addr(hw, addr);
++		else
++			ret = hns3_add_mc_addr(hw, addr);
++		if (ret) {
++			err = ret;
++			rte_ether_format_addr(mac_str, RTE_ETHER_ADDR_FMT_SIZE,
++					      addr);
++			hns3_dbg(hw, "%s mc mac addr: %s failed for pf: ret = %d",
++				 del ? "Remove" : "Restore", mac_str, ret);
++		}
++	}
++	return err;
++}
++
+ static int
+ hns3_set_mc_mac_addr_list(struct rte_eth_dev *dev,
+ 			  struct rte_ether_addr *mc_addr_set,
@@ -28,4 +64,4 @@
- 	struct rte_ether_addr *addr;
- 	int cur_addr_num;
- 	int set_addr_num;
-@@ -451,6 +452,15 @@ hns3_set_mc_mac_addr_list(struct rte_eth_dev *dev,
+ 	struct rte_ether_addr reserved_addr_list[HNS3_MC_MACADDR_NUM];
+ 	struct rte_ether_addr add_addr_list[HNS3_MC_MACADDR_NUM];
+ 	struct rte_ether_addr rm_addr_list[HNS3_MC_MACADDR_NUM];
+@@ -2055,6 +2085,15 @@ hns3_set_mc_mac_addr_list(struct rte_eth_dev *dev,
@@ -46,0 +83,36 @@
+@@ -2102,35 +2141,6 @@ hns3_set_mc_mac_addr_list(struct rte_eth_dev *dev,
+ 	return 0;
+ }
+ 
+-static 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 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 = hns3_remove_mc_addr(hw, addr);
+-		else
+-			ret = hns3_add_mc_addr(hw, addr);
+-		if (ret) {
+-			err = ret;
+-			rte_ether_format_addr(mac_str, RTE_ETHER_ADDR_FMT_SIZE,
+-					      addr);
+-			hns3_dbg(hw, "%s mc mac addr: %s failed for pf: ret = %d",
+-				 del ? "Remove" : "Restore", mac_str, ret);
+-		}
+-	}
+-	return err;
+-}
+-
+ static int
+ hns3_check_mq_mode(struct rte_eth_dev *dev)
+ {


More information about the stable mailing list