[dpdk-stable] patch 'net/bnxt: fix performance for Arm' has been queued to stable release 19.11.4

luca.boccassi at gmail.com luca.boccassi at gmail.com
Fri Jul 24 13:57:25 CEST 2020


Hi,

FYI, your patch has been queued to stable release 19.11.4

Note it hasn't been pushed to http://dpdk.org/browse/dpdk-stable yet.
It will be pushed if I get no objections before 07/26/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 e86198b452432b721a760e7c97624cccd1d7a6de Mon Sep 17 00:00:00 2001
From: Rahul Gupta <rahul.gupta at broadcom.com>
Date: Fri, 22 May 2020 23:12:09 +0530
Subject: [PATCH] net/bnxt: fix performance for Arm

[ upstream commit bfc1d45875e2c21deb11fa44a6ac4bc7035d33c6 ]

Eliminate unnecessary rte_smp_wmb() before writing to request/completion
doorbells. Use rte_cio_wmb() memory barrier instead of rte_io_wmb()
before writing to tx/rx request queue doorbells and use
rte_compiler_barrier() before writing to tx/rx completion queue
doorbells.

Fixes: 4af9d0c72941 ("net/bnxt: cleanup NQ doorbell")
Fixes: f8168ca0e690 ("net/bnxt: support thor controller")

Signed-off-by: Rahul Gupta <rahul.gupta at broadcom.com>
Signed-off-by: Kalesh AP <kalesh-anakkur.purayil at broadcom.com>
Reviewed-by: Ajit Khaparde <ajit.khaparde at broadcom.com>
Reviewed-by: Lance Richardson <lance.richardson at broadcom.com>
---
 drivers/net/bnxt/bnxt_cpr.h  |  6 +++---
 drivers/net/bnxt/bnxt_ring.h | 24 +++++++++++++-----------
 2 files changed, 16 insertions(+), 14 deletions(-)

diff --git a/drivers/net/bnxt/bnxt_cpr.h b/drivers/net/bnxt/bnxt_cpr.h
index c2880783f..cccd6cdbe 100644
--- a/drivers/net/bnxt/bnxt_cpr.h
+++ b/drivers/net/bnxt/bnxt_cpr.h
@@ -64,9 +64,9 @@ struct bnxt_db_info;
 				(cons));				\
 } while (0)
 #define B_CP_DIS_DB(cpr, raw_cons)					\
-	rte_write32((DB_CP_FLAGS |					\
-		    RING_CMP(((cpr)->cp_ring_struct), raw_cons)),	\
-		    ((cpr)->cp_db.doorbell))
+	rte_write32_relaxed((DB_CP_FLAGS |				\
+			    RING_CMP(((cpr)->cp_ring_struct), raw_cons)), \
+			    ((cpr)->cp_db.doorbell))
 
 #define B_CP_DB(cpr, raw_cons, ring_mask)				\
 	rte_write32((DB_CP_FLAGS |					\
diff --git a/drivers/net/bnxt/bnxt_ring.h b/drivers/net/bnxt/bnxt_ring.h
index 48a39d788..9913aed05 100644
--- a/drivers/net/bnxt/bnxt_ring.h
+++ b/drivers/net/bnxt/bnxt_ring.h
@@ -82,10 +82,12 @@ void bnxt_free_rxtx_nq_ring(struct bnxt *bp);
 
 static inline void bnxt_db_write(struct bnxt_db_info *db, uint32_t idx)
 {
+	rte_cio_wmb();
+
 	if (db->db_64)
 		rte_write64_relaxed(db->db_key64 | idx, db->doorbell);
 	else
-		rte_write32(db->db_key32 | idx, db->doorbell);
+		rte_write32_relaxed(db->db_key32 | idx, db->doorbell);
 }
 
 /* Ring an NQ doorbell and disable interrupts for the ring. */
@@ -94,10 +96,10 @@ static inline void bnxt_db_nq(struct bnxt_cp_ring_info *cpr)
 	if (unlikely(!cpr->cp_db.db_64))
 		return;
 
-	rte_smp_wmb();
-	rte_write64(cpr->cp_db.db_key64 | DBR_TYPE_NQ |
-		    RING_CMP(cpr->cp_ring_struct, cpr->cp_raw_cons),
-		    cpr->cp_db.doorbell);
+	rte_cio_wmb();
+	rte_write64_relaxed(cpr->cp_db.db_key64 | DBR_TYPE_NQ |
+			    RING_CMP(cpr->cp_ring_struct, cpr->cp_raw_cons),
+			    cpr->cp_db.doorbell);
 }
 
 /* Ring an NQ doorbell and enable interrupts for the ring. */
@@ -106,10 +108,10 @@ static inline void bnxt_db_nq_arm(struct bnxt_cp_ring_info *cpr)
 	if (unlikely(!cpr->cp_db.db_64))
 		return;
 
-	rte_smp_wmb();
-	rte_write64(cpr->cp_db.db_key64 | DBR_TYPE_NQ_ARM |
-		    RING_CMP(cpr->cp_ring_struct, cpr->cp_raw_cons),
-		    cpr->cp_db.doorbell);
+	rte_cio_wmb();
+	rte_write64_relaxed(cpr->cp_db.db_key64 | DBR_TYPE_NQ_ARM |
+			    RING_CMP(cpr->cp_ring_struct, cpr->cp_raw_cons),
+			    cpr->cp_db.doorbell);
 }
 
 static inline void bnxt_db_cq(struct bnxt_cp_ring_info *cpr)
@@ -117,9 +119,9 @@ static inline void bnxt_db_cq(struct bnxt_cp_ring_info *cpr)
 	struct bnxt_db_info *db = &cpr->cp_db;
 	uint32_t idx = RING_CMP(cpr->cp_ring_struct, cpr->cp_raw_cons);
 
-	rte_smp_wmb();
+	rte_compiler_barrier();
 	if (db->db_64)
-		rte_write64(db->db_key64 | idx, db->doorbell);
+		rte_write64_relaxed(db->db_key64 | idx, db->doorbell);
 	else
 		B_CP_DIS_DB(cpr, cpr->cp_raw_cons);
 }
-- 
2.20.1

---
  Diff of the applied patch vs upstream commit (please double-check if non-empty:
---
--- -	2020-07-24 12:53:48.875692444 +0100
+++ 0007-net-bnxt-fix-performance-for-Arm.patch	2020-07-24 12:53:48.155004000 +0100
@@ -1,8 +1,10 @@
-From bfc1d45875e2c21deb11fa44a6ac4bc7035d33c6 Mon Sep 17 00:00:00 2001
+From e86198b452432b721a760e7c97624cccd1d7a6de Mon Sep 17 00:00:00 2001
 From: Rahul Gupta <rahul.gupta at broadcom.com>
 Date: Fri, 22 May 2020 23:12:09 +0530
 Subject: [PATCH] net/bnxt: fix performance for Arm
 
+[ upstream commit bfc1d45875e2c21deb11fa44a6ac4bc7035d33c6 ]
+
 Eliminate unnecessary rte_smp_wmb() before writing to request/completion
 doorbells. Use rte_cio_wmb() memory barrier instead of rte_io_wmb()
 before writing to tx/rx request queue doorbells and use
@@ -11,7 +13,6 @@
 
 Fixes: 4af9d0c72941 ("net/bnxt: cleanup NQ doorbell")
 Fixes: f8168ca0e690 ("net/bnxt: support thor controller")
-Cc: stable at dpdk.org
 
 Signed-off-by: Rahul Gupta <rahul.gupta at broadcom.com>
 Signed-off-by: Kalesh AP <kalesh-anakkur.purayil at broadcom.com>


More information about the stable mailing list