[dpdk-stable] patch 'net/bnxt: fix storing MAC address twice' has been queued to stable release 19.11.3

luca.boccassi at gmail.com luca.boccassi at gmail.com
Fri May 22 11:40:03 CEST 2020


Hi,

FYI, your patch has been queued to stable release 19.11.3

Note it hasn't been pushed to http://dpdk.org/browse/dpdk-stable yet.
It will be pushed if I get no objections before 05/24/20. 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.

Thanks.

Luca Boccassi

---
>From 099b9e280c7f85a4345aca8a2e17d9813f0efe27 Mon Sep 17 00:00:00 2001
From: Kalesh AP <kalesh-anakkur.purayil at broadcom.com>
Date: Thu, 14 May 2020 22:04:36 -0700
Subject: [PATCH] net/bnxt: fix storing MAC address twice

[ upstream commit 86421846cc20e963e5b6878724727abd427cd1b6 ]

We are maintaining MAC address twice which is unnecessary.
This patch removes the copy which helps reduce size of bnxt structure.

Fixes: b7778e8a1c00 ("net/bnxt: refactor to properly allocate resources for PF/VF")

Signed-off-by: Kalesh AP <kalesh-anakkur.purayil at broadcom.com>
Signed-off-by: Ajit Khaparde <ajit.khaparde at broadcom.com>
---
 drivers/net/bnxt/bnxt.h        |  3 ++-
 drivers/net/bnxt/bnxt_ethdev.c | 11 ++++-------
 drivers/net/bnxt/bnxt_hwrm.c   |  8 ++++++--
 3 files changed, 12 insertions(+), 10 deletions(-)

diff --git a/drivers/net/bnxt/bnxt.h b/drivers/net/bnxt/bnxt.h
index 995e5980a6..404d58a037 100644
--- a/drivers/net/bnxt/bnxt.h
+++ b/drivers/net/bnxt/bnxt.h
@@ -527,6 +527,7 @@ struct bnxt {
 #define BNXT_FLAG_FW_CAP_ONE_STEP_TX_TS		BIT(22)
 #define BNXT_FLAG_ADV_FLOW_MGMT			BIT(23)
 #define BNXT_FLAG_NPAR_PF                      BIT(24)
+#define BNXT_FLAG_DFLT_MAC_SET			BIT(26)
 #define BNXT_PF(bp)		(!((bp)->flags & BNXT_FLAG_VF))
 #define BNXT_VF(bp)		((bp)->flags & BNXT_FLAG_VF)
 #define BNXT_NPAR(bp)		((bp)->flags & BNXT_FLAG_NPAR_PF)
@@ -539,6 +540,7 @@ struct bnxt {
 #define BNXT_STINGRAY(bp)	((bp)->flags & BNXT_FLAG_STINGRAY)
 #define BNXT_HAS_NQ(bp)		BNXT_CHIP_THOR(bp)
 #define BNXT_HAS_RING_GRPS(bp)	(!BNXT_CHIP_THOR(bp))
+#define BNXT_HAS_DFLT_MAC_SET(bp)      ((bp)->flags & BNXT_FLAG_DFLT_MAC_SET)
 
 	uint32_t		fw_cap;
 #define BNXT_FW_CAP_HOT_RESET		BIT(0)
@@ -621,7 +623,6 @@ struct bnxt {
 	uint8_t                 max_q;
 
 	uint16_t		fw_fid;
-	uint8_t			dflt_mac_addr[RTE_ETHER_ADDR_LEN];
 	uint16_t		max_rsscos_ctx;
 	uint16_t		max_cp_rings;
 	uint16_t		max_tx_rings;
diff --git a/drivers/net/bnxt/bnxt_ethdev.c b/drivers/net/bnxt/bnxt_ethdev.c
index aa6ceff13c..f1bd575356 100644
--- a/drivers/net/bnxt/bnxt_ethdev.c
+++ b/drivers/net/bnxt/bnxt_ethdev.c
@@ -4611,7 +4611,7 @@ static int bnxt_setup_mac_addr(struct rte_eth_dev *eth_dev)
 		return -ENOMEM;
 	}
 
-	if (bnxt_check_zero_bytes(bp->dflt_mac_addr, RTE_ETHER_ADDR_LEN)) {
+	if (!BNXT_HAS_DFLT_MAC_SET(bp)) {
 		if (BNXT_PF(bp))
 			return -EINVAL;
 
@@ -4624,14 +4624,11 @@ static int bnxt_setup_mac_addr(struct rte_eth_dev *eth_dev)
 			    bp->mac_addr[3], bp->mac_addr[4], bp->mac_addr[5]);
 
 		rc = bnxt_hwrm_set_mac(bp);
-		if (!rc)
-			memcpy(&bp->eth_dev->data->mac_addrs[0], bp->mac_addr,
-			       RTE_ETHER_ADDR_LEN);
-		return rc;
+		if (rc)
+			return rc;
 	}
 
 	/* Copy the permanent MAC from the FUNC_QCAPS response */
-	memcpy(bp->mac_addr, bp->dflt_mac_addr, RTE_ETHER_ADDR_LEN);
 	memcpy(&eth_dev->data->mac_addrs[0], bp->mac_addr, RTE_ETHER_ADDR_LEN);
 
 	return rc;
@@ -4642,7 +4639,7 @@ static int bnxt_restore_dflt_mac(struct bnxt *bp)
 	int rc = 0;
 
 	/* MAC is already configured in FW */
-	if (!bnxt_check_zero_bytes(bp->dflt_mac_addr, RTE_ETHER_ADDR_LEN))
+	if (BNXT_HAS_DFLT_MAC_SET(bp))
 		return 0;
 
 	/* Restore the old MAC configured */
diff --git a/drivers/net/bnxt/bnxt_hwrm.c b/drivers/net/bnxt/bnxt_hwrm.c
index 9dad6bd319..33f352fade 100644
--- a/drivers/net/bnxt/bnxt_hwrm.c
+++ b/drivers/net/bnxt/bnxt_hwrm.c
@@ -646,7 +646,12 @@ static int __bnxt_hwrm_func_qcaps(struct bnxt *bp)
 	}
 
 	bp->fw_fid = rte_le_to_cpu_32(resp->fid);
-	memcpy(bp->dflt_mac_addr, &resp->mac_address, RTE_ETHER_ADDR_LEN);
+	if (!bnxt_check_zero_bytes(resp->mac_address, RTE_ETHER_ADDR_LEN)) {
+		bp->flags |= BNXT_FLAG_DFLT_MAC_SET;
+		memcpy(bp->mac_addr, &resp->mac_address, RTE_ETHER_ADDR_LEN);
+	} else {
+		bp->flags &= ~BNXT_FLAG_DFLT_MAC_SET;
+	}
 	bp->max_rsscos_ctx = rte_le_to_cpu_16(resp->max_rsscos_ctx);
 	bp->max_cp_rings = rte_le_to_cpu_16(resp->max_cmpl_rings);
 	bp->max_tx_rings = rte_le_to_cpu_16(resp->max_tx_rings);
@@ -4861,7 +4866,6 @@ int bnxt_hwrm_set_mac(struct bnxt *bp)
 
 	HWRM_CHECK_RESULT();
 
-	memcpy(bp->dflt_mac_addr, bp->mac_addr, RTE_ETHER_ADDR_LEN);
 	HWRM_UNLOCK();
 
 	return rc;
-- 
2.20.1

---
  Diff of the applied patch vs upstream commit (please double-check if non-empty:
---
--- -	2020-05-22 10:37:40.141748846 +0100
+++ 0024-net-bnxt-fix-storing-MAC-address-twice.patch	2020-05-22 10:37:39.136412857 +0100
@@ -1,13 +1,14 @@
-From 86421846cc20e963e5b6878724727abd427cd1b6 Mon Sep 17 00:00:00 2001
+From 099b9e280c7f85a4345aca8a2e17d9813f0efe27 Mon Sep 17 00:00:00 2001
 From: Kalesh AP <kalesh-anakkur.purayil at broadcom.com>
 Date: Thu, 14 May 2020 22:04:36 -0700
 Subject: [PATCH] net/bnxt: fix storing MAC address twice
 
+[ upstream commit 86421846cc20e963e5b6878724727abd427cd1b6 ]
+
 We are maintaining MAC address twice which is unnecessary.
 This patch removes the copy which helps reduce size of bnxt structure.
 
 Fixes: b7778e8a1c00 ("net/bnxt: refactor to properly allocate resources for PF/VF")
-Cc: stable at dpdk.org
 
 Signed-off-by: Kalesh AP <kalesh-anakkur.purayil at broadcom.com>
 Signed-off-by: Ajit Khaparde <ajit.khaparde at broadcom.com>
@@ -18,26 +19,26 @@
  3 files changed, 12 insertions(+), 10 deletions(-)
 
 diff --git a/drivers/net/bnxt/bnxt.h b/drivers/net/bnxt/bnxt.h
-index 4093a2f01e..403b23f356 100644
+index 995e5980a6..404d58a037 100644
 --- a/drivers/net/bnxt/bnxt.h
 +++ b/drivers/net/bnxt/bnxt.h
-@@ -560,6 +560,7 @@ struct bnxt {
- #define BNXT_FLAG_FC_THREAD			BIT(23)
- #define BNXT_FLAG_RX_VECTOR_PKT_MODE		BIT(24)
- #define BNXT_FLAG_FLOW_XSTATS_EN		BIT(25)
+@@ -527,6 +527,7 @@ struct bnxt {
+ #define BNXT_FLAG_FW_CAP_ONE_STEP_TX_TS		BIT(22)
+ #define BNXT_FLAG_ADV_FLOW_MGMT			BIT(23)
+ #define BNXT_FLAG_NPAR_PF                      BIT(24)
 +#define BNXT_FLAG_DFLT_MAC_SET			BIT(26)
  #define BNXT_PF(bp)		(!((bp)->flags & BNXT_FLAG_VF))
  #define BNXT_VF(bp)		((bp)->flags & BNXT_FLAG_VF)
  #define BNXT_NPAR(bp)		((bp)->flags & BNXT_FLAG_NPAR_PF)
-@@ -573,6 +574,7 @@ struct bnxt {
+@@ -539,6 +540,7 @@ struct bnxt {
+ #define BNXT_STINGRAY(bp)	((bp)->flags & BNXT_FLAG_STINGRAY)
  #define BNXT_HAS_NQ(bp)		BNXT_CHIP_THOR(bp)
  #define BNXT_HAS_RING_GRPS(bp)	(!BNXT_CHIP_THOR(bp))
- #define BNXT_FLOW_XSTATS_EN(bp)	((bp)->flags & BNXT_FLAG_FLOW_XSTATS_EN)
 +#define BNXT_HAS_DFLT_MAC_SET(bp)      ((bp)->flags & BNXT_FLAG_DFLT_MAC_SET)
  
  	uint32_t		fw_cap;
  #define BNXT_FW_CAP_HOT_RESET		BIT(0)
-@@ -658,7 +660,6 @@ struct bnxt {
+@@ -621,7 +623,6 @@ struct bnxt {
  	uint8_t                 max_q;
  
  	uint16_t		fw_fid;
@@ -46,10 +47,10 @@
  	uint16_t		max_cp_rings;
  	uint16_t		max_tx_rings;
 diff --git a/drivers/net/bnxt/bnxt_ethdev.c b/drivers/net/bnxt/bnxt_ethdev.c
-index 4d64a98351..77492f89c7 100644
+index aa6ceff13c..f1bd575356 100644
 --- a/drivers/net/bnxt/bnxt_ethdev.c
 +++ b/drivers/net/bnxt/bnxt_ethdev.c
-@@ -4980,7 +4980,7 @@ static int bnxt_setup_mac_addr(struct rte_eth_dev *eth_dev)
+@@ -4611,7 +4611,7 @@ static int bnxt_setup_mac_addr(struct rte_eth_dev *eth_dev)
  		return -ENOMEM;
  	}
  
@@ -58,7 +59,7 @@
  		if (BNXT_PF(bp))
  			return -EINVAL;
  
-@@ -4993,14 +4993,11 @@ static int bnxt_setup_mac_addr(struct rte_eth_dev *eth_dev)
+@@ -4624,14 +4624,11 @@ static int bnxt_setup_mac_addr(struct rte_eth_dev *eth_dev)
  			    bp->mac_addr[3], bp->mac_addr[4], bp->mac_addr[5]);
  
  		rc = bnxt_hwrm_set_mac(bp);
@@ -75,7 +76,7 @@
  	memcpy(&eth_dev->data->mac_addrs[0], bp->mac_addr, RTE_ETHER_ADDR_LEN);
  
  	return rc;
-@@ -5011,7 +5008,7 @@ static int bnxt_restore_dflt_mac(struct bnxt *bp)
+@@ -4642,7 +4639,7 @@ static int bnxt_restore_dflt_mac(struct bnxt *bp)
  	int rc = 0;
  
  	/* MAC is already configured in FW */
@@ -85,10 +86,10 @@
  
  	/* Restore the old MAC configured */
 diff --git a/drivers/net/bnxt/bnxt_hwrm.c b/drivers/net/bnxt/bnxt_hwrm.c
-index a41d77669b..c1798b59d1 100644
+index 9dad6bd319..33f352fade 100644
 --- a/drivers/net/bnxt/bnxt_hwrm.c
 +++ b/drivers/net/bnxt/bnxt_hwrm.c
-@@ -731,7 +731,12 @@ static int __bnxt_hwrm_func_qcaps(struct bnxt *bp)
+@@ -646,7 +646,12 @@ static int __bnxt_hwrm_func_qcaps(struct bnxt *bp)
  	}
  
  	bp->fw_fid = rte_le_to_cpu_32(resp->fid);
@@ -102,7 +103,7 @@
  	bp->max_rsscos_ctx = rte_le_to_cpu_16(resp->max_rsscos_ctx);
  	bp->max_cp_rings = rte_le_to_cpu_16(resp->max_cmpl_rings);
  	bp->max_tx_rings = rte_le_to_cpu_16(resp->max_tx_rings);
-@@ -5027,7 +5032,6 @@ int bnxt_hwrm_set_mac(struct bnxt *bp)
+@@ -4861,7 +4866,6 @@ int bnxt_hwrm_set_mac(struct bnxt *bp)
  
  	HWRM_CHECK_RESULT();
  


More information about the stable mailing list