patches for DPDK stable branches
 help / color / mirror / Atom feed
From: Kevin Traynor <ktraynor@redhat.com>
To: Rasesh Mody <rmody@marvell.com>
Cc: dpdk stable <stable@dpdk.org>
Subject: [dpdk-stable] patch 'net/bnx2x: fix to sync fastpath Rx queue access' has been queued to LTS release 18.11.7
Date: Fri, 14 Feb 2020 17:03:15 +0000	[thread overview]
Message-ID: <20200214170337.25093-21-ktraynor@redhat.com> (raw)
In-Reply-To: <20200214170337.25093-1-ktraynor@redhat.com>

Hi,

FYI, your patch has been queued to LTS release 18.11.7

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

This queued commit can be viewed at:
https://github.com/kevintraynor/dpdk-stable-queue/commit/c7afc147a41e78e89a1f86f27337e35593d38cd0

Thanks.

Kevin.

---
From c7afc147a41e78e89a1f86f27337e35593d38cd0 Mon Sep 17 00:00:00 2001
From: Rasesh Mody <rmody@marvell.com>
Date: Sun, 26 Jan 2020 14:54:19 -0800
Subject: [PATCH] net/bnx2x: fix to sync fastpath Rx queue access

[ upstream commit 141c86f55f734c4f8b9ad3129b6e58807b5c4577 ]

PMD handles fast path completions in the Rx handler and control path
completions in the interrupt handler. They both are processing
completions from the same fastpath completion queue. There is a
potential for race condition when these two paths are processing
the completions from the same queue and trying to updating Rx Producer.

Add a fastpath Rx lock between these two paths to close this race.

Fixes: 540a211084a7 ("bnx2x: driver core")

Signed-off-by: Rasesh Mody <rmody@marvell.com>
---
 drivers/net/bnx2x/bnx2x.c      | 12 ++++++++++++
 drivers/net/bnx2x/bnx2x.h      |  3 +++
 drivers/net/bnx2x/bnx2x_rxtx.c |  8 +++++++-
 3 files changed, 22 insertions(+), 1 deletion(-)

diff --git a/drivers/net/bnx2x/bnx2x.c b/drivers/net/bnx2x/bnx2x.c
index ab18fe2e56..b217a9f655 100644
--- a/drivers/net/bnx2x/bnx2x.c
+++ b/drivers/net/bnx2x/bnx2x.c
@@ -1168,4 +1168,8 @@ static int bnx2x_has_rx_work(struct bnx2x_fastpath *fp)
 		     MAX_RCQ_ENTRIES(rxq)))
 		rx_cq_cons_sb++;
+
+	PMD_RX_LOG(DEBUG, "hw CQ cons = %d, sw CQ cons = %d",
+		   rx_cq_cons_sb, rxq->rx_cq_head);
+
 	return rxq->rx_cq_head != rx_cq_cons_sb;
 }
@@ -1250,7 +1254,10 @@ static uint8_t bnx2x_rxeof(struct bnx2x_softc *sc, struct bnx2x_fastpath *fp)
 	uint16_t hw_cq_cons, sw_cq_cons, sw_cq_prod;
 
+	rte_spinlock_lock(&(fp)->rx_mtx);
+
 	rxq = sc->rx_queues[fp->index];
 	if (!rxq) {
 		PMD_RX_LOG(ERR, "RX queue %d is NULL", fp->index);
+		rte_spinlock_unlock(&(fp)->rx_mtx);
 		return 0;
 	}
@@ -1322,7 +1329,12 @@ next_cqe:
 	rxq->rx_cq_tail = sw_cq_prod;
 
+	PMD_RX_LOG(DEBUG, "BD prod = %d, sw CQ prod = %d",
+		   bd_prod_fw, sw_cq_prod);
+
 	/* Update producers */
 	bnx2x_update_rx_prod(sc, fp, bd_prod_fw, sw_cq_prod);
 
+	rte_spinlock_unlock(&(fp)->rx_mtx);
+
 	return sw_cq_cons != hw_cq_cons;
 }
diff --git a/drivers/net/bnx2x/bnx2x.h b/drivers/net/bnx2x/bnx2x.h
index ceaecb031f..fd49b9a3af 100644
--- a/drivers/net/bnx2x/bnx2x.h
+++ b/drivers/net/bnx2x/bnx2x.h
@@ -375,4 +375,7 @@ struct bnx2x_fastpath {
 	struct bnx2x_softc *sc;
 
+	/* Used to synchronize fastpath Rx access */
+	rte_spinlock_t rx_mtx;
+
 	/* status block */
 	struct bnx2x_dma                 sb_dma;
diff --git a/drivers/net/bnx2x/bnx2x_rxtx.c b/drivers/net/bnx2x/bnx2x_rxtx.c
index e5a2b25b56..71ebdf3f6b 100644
--- a/drivers/net/bnx2x/bnx2x_rxtx.c
+++ b/drivers/net/bnx2x/bnx2x_rxtx.c
@@ -345,4 +345,6 @@ bnx2x_recv_pkts(void *p_rxq, struct rte_mbuf **rx_pkts, uint16_t nb_pkts)
 	struct rte_mbuf *rx_mb = NULL;
 
+	rte_spinlock_lock(&(fp)->rx_mtx);
+
 	hw_cq_cons = le16toh(*fp->rx_cq_cons_sb);
 	if ((hw_cq_cons & USABLE_RCQ_ENTRIES_PER_PAGE) ==
@@ -356,6 +358,8 @@ bnx2x_recv_pkts(void *p_rxq, struct rte_mbuf **rx_pkts, uint16_t nb_pkts)
 	sw_cq_prod = rxq->rx_cq_tail;
 
-	if (sw_cq_cons == hw_cq_cons)
+	if (sw_cq_cons == hw_cq_cons) {
+		rte_spinlock_unlock(&(fp)->rx_mtx);
 		return 0;
+	}
 
 	while (nb_rx < nb_pkts && sw_cq_cons != hw_cq_cons) {
@@ -438,4 +442,6 @@ next_rx:
 	bnx2x_upd_rx_prod_fast(sc, fp, bd_prod, sw_cq_prod);
 
+	rte_spinlock_unlock(&(fp)->rx_mtx);
+
 	return nb_rx;
 }
-- 
2.21.1

---
  Diff of the applied patch vs upstream commit (please double-check if non-empty:
---
--- -	2020-02-14 17:02:38.206272383 +0000
+++ 0021-net-bnx2x-fix-to-sync-fastpath-Rx-queue-access.patch	2020-02-14 17:02:36.983407271 +0000
@@ -1 +1 @@
-From 141c86f55f734c4f8b9ad3129b6e58807b5c4577 Mon Sep 17 00:00:00 2001
+From c7afc147a41e78e89a1f86f27337e35593d38cd0 Mon Sep 17 00:00:00 2001
@@ -5,0 +6,2 @@
+[ upstream commit 141c86f55f734c4f8b9ad3129b6e58807b5c4577 ]
+
@@ -15 +16,0 @@
-Cc: stable@dpdk.org
@@ -25 +26 @@
-index 50e289b286..0b4030e2b9 100644
+index ab18fe2e56..b217a9f655 100644
@@ -62 +63 @@
-index 3383c76759..1dbc98197d 100644
+index ceaecb031f..fd49b9a3af 100644
@@ -65 +66 @@
-@@ -361,4 +361,7 @@ struct bnx2x_fastpath {
+@@ -375,4 +375,7 @@ struct bnx2x_fastpath {
@@ -74 +75 @@
-index ae97dfee36..0d77035844 100644
+index e5a2b25b56..71ebdf3f6b 100644
@@ -77 +78 @@
-@@ -347,4 +347,6 @@ bnx2x_recv_pkts(void *p_rxq, struct rte_mbuf **rx_pkts, uint16_t nb_pkts)
+@@ -345,4 +345,6 @@ bnx2x_recv_pkts(void *p_rxq, struct rte_mbuf **rx_pkts, uint16_t nb_pkts)
@@ -84 +85 @@
-@@ -358,6 +360,8 @@ bnx2x_recv_pkts(void *p_rxq, struct rte_mbuf **rx_pkts, uint16_t nb_pkts)
+@@ -356,6 +358,8 @@ bnx2x_recv_pkts(void *p_rxq, struct rte_mbuf **rx_pkts, uint16_t nb_pkts)
@@ -94 +95 @@
-@@ -440,4 +444,6 @@ next_rx:
+@@ -438,4 +442,6 @@ next_rx:


  parent reply	other threads:[~2020-02-14 17:05 UTC|newest]

Thread overview: 43+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2020-02-14 17:02 [dpdk-stable] patch 'net/virtio-user: do not close tap when disabling queue pairs' " Kevin Traynor
2020-02-14 17:02 ` [dpdk-stable] patch 'net/virtio-user: check tap offload setting failure' " Kevin Traynor
2020-02-14 17:02 ` [dpdk-stable] patch 'vhost: fix deadlock on port deletion' " Kevin Traynor
2020-02-14 17:02 ` [dpdk-stable] patch 'net/ixgbe: remove duplicate function declaration' " Kevin Traynor
2020-02-14 17:02 ` [dpdk-stable] patch 'net/dpaa: fix Rx offload flags on jumbo MTU set' " Kevin Traynor
2020-02-14 17:03 ` [dpdk-stable] patch 'ethdev: fix switching domain allocation' " Kevin Traynor
2020-02-14 17:03 ` [dpdk-stable] patch 'ethdev: fix secondary process memory overwrite' " Kevin Traynor
2020-02-14 17:03 ` [dpdk-stable] patch 'mk: avoid combining -r and -export-dynamic linker options' " Kevin Traynor
2020-02-14 17:03 ` [dpdk-stable] patch 'kni: rename variable with namespace prefix' " Kevin Traynor
2020-02-14 17:03 ` [dpdk-stable] patch 'cfgfile: fix symbols map' " Kevin Traynor
2020-02-14 17:03 ` [dpdk-stable] patch 'latency: fix calculation for multi-thread' " Kevin Traynor
2020-02-14 17:03 ` [dpdk-stable] patch 'mempool: fix anonymous populate' " Kevin Traynor
2020-02-14 17:03 ` [dpdk-stable] patch 'maintainers: update for failsafe and PCI library' " Kevin Traynor
2020-02-14 17:03 ` [dpdk-stable] patch 'maintainers: resign from flow API maintenance' " Kevin Traynor
2020-02-14 17:03 ` [dpdk-stable] patch 'net/bnxt: fix flow creation' " Kevin Traynor
2020-02-14 17:03 ` [dpdk-stable] patch 'net/bnxt: use macro for PCI log format' " Kevin Traynor
2020-02-14 17:03 ` [dpdk-stable] patch 'net/bnxt: do not log error if stats queried before start' " Kevin Traynor
2020-02-14 17:03 ` [dpdk-stable] patch 'net/bnxt: remove unnecessary memset' " Kevin Traynor
2020-02-14 17:03 ` [dpdk-stable] patch 'net/tap: fix memory leak when unregister intr handler' " Kevin Traynor
2020-02-14 17:03 ` [dpdk-stable] patch 'net/bnx2x: fix reset of scan FP flag' " Kevin Traynor
2020-02-14 17:03 ` Kevin Traynor [this message]
2020-02-14 17:03 ` [dpdk-stable] patch 'net/bnxt: fix alloc filter to use a common routine' " Kevin Traynor
2020-02-14 17:03 ` [dpdk-stable] patch 'net/bnxt: remove redundant if statement' " Kevin Traynor
2020-02-14 17:03 ` [dpdk-stable] patch 'net/bnx2x: fix VLAN stripped flag' " Kevin Traynor
2020-02-14 17:03 ` [dpdk-stable] patch 'net/mlx5: fix VXLAN-GPE item translation' " Kevin Traynor
2020-02-14 17:03 ` [dpdk-stable] patch 'net/octeontx: fix memory leak of MAC address table' " Kevin Traynor
2020-02-14 17:03 ` [dpdk-stable] patch 'app/testpmd: fix uninitialized members of MPLS' " Kevin Traynor
2020-02-14 17:03 ` [dpdk-stable] patch 'app/testpmd: fix initial value when setting PFC' " Kevin Traynor
2020-02-14 17:03 ` [dpdk-stable] patch 'app/testpmd: fix uninitialized members " Kevin Traynor
2020-02-14 17:03 ` [dpdk-stable] patch 'net/failsafe: fix reported hash key size in device info' " Kevin Traynor
2020-02-14 17:03 ` [dpdk-stable] patch 'vhost: fix crash on port deletion' " Kevin Traynor
2020-02-14 17:03 ` [dpdk-stable] patch 'vhost: do not treat empty socket message as error' " Kevin Traynor
2020-02-14 17:03 ` [dpdk-stable] patch 'vhost/crypto: fix fetch size' " Kevin Traynor
2020-02-14 17:03 ` [dpdk-stable] patch 'vhost: fix packed virtqueue ready condition' " Kevin Traynor
2020-02-14 17:03 ` [dpdk-stable] patch 'vhost: catch overflow causing mmap of size 0' " Kevin Traynor
2020-02-14 17:03 ` [dpdk-stable] patch 'crypto/armv8: fix clang build' " Kevin Traynor
2020-02-14 17:03 ` [dpdk-stable] patch 'examples/fips_validation: fix cipher length for AES-GCM' " Kevin Traynor
2020-02-14 17:03 ` [dpdk-stable] patch 'common/cpt: remove redundant code in datapath' " Kevin Traynor
2020-02-14 17:03 ` [dpdk-stable] patch 'common/cpt: check cipher and auth keys are set' " Kevin Traynor
2020-02-14 17:03 ` [dpdk-stable] patch 'common/cpt: fix component for empty IOV buffer' " Kevin Traynor
2020-02-14 17:03 ` [dpdk-stable] patch 'bpf: fix headers install with meson' " Kevin Traynor
2020-02-14 17:03 ` [dpdk-stable] patch 'app/pdump: fix build with clang' " Kevin Traynor
2020-02-14 17:03 ` [dpdk-stable] patch 'mem: fix munmap in error unwind' " Kevin Traynor

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20200214170337.25093-21-ktraynor@redhat.com \
    --to=ktraynor@redhat.com \
    --cc=rmody@marvell.com \
    --cc=stable@dpdk.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).