[dpdk-stable] patch 'net/bnxt: fix doorbell barrier location' has been queued to stable release 19.11.6

luca.boccassi at gmail.com luca.boccassi at gmail.com
Tue Nov 17 12:14:06 CET 2020


Hi,

FYI, your patch has been queued to stable release 19.11.6

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

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/facbbcff2416df315c05f082a861d233aa457f83

Thanks.

Luca Boccassi

---
>From facbbcff2416df315c05f082a861d233aa457f83 Mon Sep 17 00:00:00 2001
From: Lance Richardson <lance.richardson at broadcom.com>
Date: Fri, 13 Nov 2020 11:04:45 -0500
Subject: [PATCH] net/bnxt: fix doorbell barrier location

[ upstream commit d1816ceae5a8e483ae3764e800571b57e1dfa960 ]

Simplify some doorbell functions now that rte_cio_wmb() has been
eliminated and rte_io_wmb() is equivalent for Arm.

Fix a performance degradation on x86 platforms caused by a
previous Arm performance fix by moving the compiler barrier
closer to the I/O write.

Fixes: f0f5d844d138 ("eal: remove deprecated coherent IO memory barriers")
Fixes: bfc1d45875e2 ("net/bnxt: fix performance for Arm")

Signed-off-by: Lance Richardson <lance.richardson at broadcom.com>
Signed-off-by: Ajit Khaparde <ajit.khaparde at broadcom.com>
---
 drivers/net/bnxt/bnxt_ring.h | 37 +++++++++++++++++++-----------------
 1 file changed, 20 insertions(+), 17 deletions(-)

diff --git a/drivers/net/bnxt/bnxt_ring.h b/drivers/net/bnxt/bnxt_ring.h
index f8442edb66..0a4685d167 100644
--- a/drivers/net/bnxt/bnxt_ring.h
+++ b/drivers/net/bnxt/bnxt_ring.h
@@ -82,12 +82,10 @@ 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);
+		rte_write64(db->db_key64 | idx, db->doorbell);
 	else
-		rte_write32_relaxed(db->db_key32 | idx, db->doorbell);
+		rte_write32(db->db_key32 | idx, db->doorbell);
 }
 
 /* Ring an NQ doorbell and disable interrupts for the ring. */
@@ -96,10 +94,9 @@ static inline void bnxt_db_nq(struct bnxt_cp_ring_info *cpr)
 	if (unlikely(!cpr->cp_db.db_64))
 		return;
 
-	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);
+	rte_write64(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. */
@@ -108,10 +105,9 @@ static inline void bnxt_db_nq_arm(struct bnxt_cp_ring_info *cpr)
 	if (unlikely(!cpr->cp_db.db_64))
 		return;
 
-	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);
+	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);
 }
 
 static inline void bnxt_db_cq(struct bnxt_cp_ring_info *cpr)
@@ -119,11 +115,18 @@ 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_compiler_barrier();
-	if (db->db_64)
-		rte_write64_relaxed(db->db_key64 | idx, db->doorbell);
-	else
-		B_CP_DIS_DB(cpr, cpr->cp_raw_cons);
+	if (db->db_64) {
+		uint64_t key_idx = db->db_key64 | idx;
+		void *doorbell = db->doorbell;
+
+		rte_compiler_barrier();
+		rte_write64_relaxed(key_idx, doorbell);
+	} else {
+		uint32_t cp_raw_cons = cpr->cp_raw_cons;
+
+		rte_compiler_barrier();
+		B_CP_DIS_DB(cpr, cp_raw_cons);
+	}
 }
 
 #endif
-- 
2.27.0

---
  Diff of the applied patch vs upstream commit (please double-check if non-empty:
---
--- -	2020-11-17 11:13:14.339609646 +0000
+++ 0032-net-bnxt-fix-doorbell-barrier-location.patch	2020-11-17 11:13:12.941117012 +0000
@@ -1 +1 @@
-From d1816ceae5a8e483ae3764e800571b57e1dfa960 Mon Sep 17 00:00:00 2001
+From facbbcff2416df315c05f082a861d233aa457f83 Mon Sep 17 00:00:00 2001
@@ -5,0 +6,2 @@
+[ upstream commit d1816ceae5a8e483ae3764e800571b57e1dfa960 ]
+
@@ -15 +16,0 @@
-Cc: stable at dpdk.org
@@ -24 +25 @@
-index 3d81f610c1..0a4685d167 100644
+index f8442edb66..0a4685d167 100644
@@ -31 +32 @@
--	rte_io_wmb();
+-	rte_cio_wmb();
@@ -46 +47 @@
--	rte_io_wmb();
+-	rte_cio_wmb();
@@ -60 +61 @@
--	rte_io_wmb();
+-	rte_cio_wmb();


More information about the stable mailing list