patches for DPDK stable branches
 help / color / mirror / Atom feed
From: Kevin Traynor <ktraynor@redhat.com>
To: Shahed Shaikh <shshaikh@marvell.com>
Cc: dpdk stable <stable@dpdk.org>
Subject: [dpdk-stable] patch 'net/bnx2x: fix ramrod timeout' has been queued to LTS release 18.11.2
Date: Wed,  8 May 2019 11:14:45 +0100	[thread overview]
Message-ID: <20190508101534.8984-3-ktraynor@redhat.com> (raw)
In-Reply-To: <20190508101534.8984-1-ktraynor@redhat.com>

Hi,

FYI, your patch has been queued to LTS release 18.11.2

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/13/19. 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/ec060662b2f4030f5e549755c1935ebe864e65fe

Thanks.

Kevin Traynor

---
From ec060662b2f4030f5e549755c1935ebe864e65fe Mon Sep 17 00:00:00 2001
From: Shahed Shaikh <shshaikh@marvell.com>
Date: Thu, 11 Apr 2019 18:47:39 -0700
Subject: [PATCH] net/bnx2x: fix ramrod timeout

[ upstream commit 8bd31421c593e5f3e2ee2a4d7d3c6a74489838c6 ]

There is a race condition while processing RAMROD
completion in fast path queue through interrupt handler
and polling method.

Interrupt handler invoked from actual interrupt event
and from RAMROD processing polling flow may create a
situation where one flow will read and clear a fastpath
interrupt without actually processing the RAMROD completion.
Thus, causing a RAMROD timeout even though HW sent an
completion event.

Fix this by introducing an atomic variable which will be
set only when interrupt handler needs to process RAMROD
completion.

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

Signed-off-by: Shahed Shaikh <shshaikh@marvell.com>
---
 drivers/net/bnx2x/bnx2x.c        | 18 ++++++++++++------
 drivers/net/bnx2x/bnx2x.h        |  4 ++--
 drivers/net/bnx2x/bnx2x_ethdev.c |  2 +-
 drivers/net/bnx2x/ecore_sp.c     | 12 ++++++++++--
 4 files changed, 25 insertions(+), 11 deletions(-)

diff --git a/drivers/net/bnx2x/bnx2x.c b/drivers/net/bnx2x/bnx2x.c
index 298bc414a..f32db6d12 100644
--- a/drivers/net/bnx2x/bnx2x.c
+++ b/drivers/net/bnx2x/bnx2x.c
@@ -125,5 +125,5 @@ int bnx2x_nic_load(struct bnx2x_softc *sc);
 
 static int bnx2x_handle_sp_tq(struct bnx2x_softc *sc);
-static void bnx2x_handle_fp_tq(struct bnx2x_fastpath *fp, int scan_fp);
+static void bnx2x_handle_fp_tq(struct bnx2x_fastpath *fp);
 static void bnx2x_ack_sb(struct bnx2x_softc *sc, uint8_t igu_sb_id,
 			 uint8_t storm, uint16_t index, uint8_t op,
@@ -1115,4 +1115,10 @@ bnx2x_sp_post(struct bnx2x_softc *sc, int command, int cid, uint32_t data_hi,
 		    atomic_load_acq_long(&sc->eq_spq_left));
 
+	/* RAMROD completion is processed in bnx2x_intr_legacy()
+	 * which can run from different contexts.
+	 * Ask bnx2x_intr_intr() to process RAMROD
+	 * completion whenever it gets scheduled.
+	 */
+	rte_atomic32_set(&sc->scan_fp, 1);
 	bnx2x_sp_prod_update(sc);
 
@@ -4540,5 +4546,5 @@ static int bnx2x_handle_sp_tq(struct bnx2x_softc *sc)
 }
 
-static void bnx2x_handle_fp_tq(struct bnx2x_fastpath *fp, int scan_fp)
+static void bnx2x_handle_fp_tq(struct bnx2x_fastpath *fp)
 {
 	struct bnx2x_softc *sc = fp->sc;
@@ -4555,5 +4561,5 @@ static void bnx2x_handle_fp_tq(struct bnx2x_fastpath *fp, int scan_fp)
 	bnx2x_update_fp_sb_idx(fp);
 
-	if (scan_fp) {
+	if (rte_atomic32_read(&sc->scan_fp) == 1) {
 		if (bnx2x_has_rx_work(fp)) {
 			more_rx = bnx2x_rxeof(sc, fp);
@@ -4562,5 +4568,5 @@ static void bnx2x_handle_fp_tq(struct bnx2x_fastpath *fp, int scan_fp)
 		if (more_rx) {
 			/* still more work to do */
-			bnx2x_handle_fp_tq(fp, scan_fp);
+			bnx2x_handle_fp_tq(fp);
 			return;
 		}
@@ -4578,5 +4584,5 @@ static void bnx2x_handle_fp_tq(struct bnx2x_fastpath *fp, int scan_fp)
  * interrupt causes: link, RX, and TX.
  */
-int bnx2x_intr_legacy(struct bnx2x_softc *sc, int scan_fp)
+int bnx2x_intr_legacy(struct bnx2x_softc *sc)
 {
 	struct bnx2x_fastpath *fp;
@@ -4610,5 +4616,5 @@ int bnx2x_intr_legacy(struct bnx2x_softc *sc, int scan_fp)
 			bnx2x_ack_sb(sc, fp->igu_sb_id, USTORM_ID,
 				     0, IGU_INT_DISABLE, 0);
-			bnx2x_handle_fp_tq(fp, scan_fp);
+			bnx2x_handle_fp_tq(fp);
 			status &= ~mask;
 		}
diff --git a/drivers/net/bnx2x/bnx2x.h b/drivers/net/bnx2x/bnx2x.h
index 9e82a8931..bb8031001 100644
--- a/drivers/net/bnx2x/bnx2x.h
+++ b/drivers/net/bnx2x/bnx2x.h
@@ -1091,5 +1091,5 @@ struct bnx2x_softc {
 #define PERIODIC_GO   1
 	volatile unsigned long periodic_flags;
-
+	rte_atomic32_t	scan_fp;
 	struct bnx2x_fastpath fp[MAX_RSS_CHAINS];
 	struct bnx2x_sp_objs  sp_objs[MAX_RSS_CHAINS];
@@ -1940,5 +1940,5 @@ uint8_t bnx2x_txeof(struct bnx2x_softc *sc, struct bnx2x_fastpath *fp);
 void bnx2x_print_adapter_info(struct bnx2x_softc *sc);
 void bnx2x_print_device_info(struct bnx2x_softc *sc);
-int bnx2x_intr_legacy(struct bnx2x_softc *sc, int scan_fp);
+int bnx2x_intr_legacy(struct bnx2x_softc *sc);
 void bnx2x_link_status_update(struct bnx2x_softc *sc);
 int bnx2x_complete_sp(struct bnx2x_softc *sc);
diff --git a/drivers/net/bnx2x/bnx2x_ethdev.c b/drivers/net/bnx2x/bnx2x_ethdev.c
index c31821316..d5328e8d9 100644
--- a/drivers/net/bnx2x/bnx2x_ethdev.c
+++ b/drivers/net/bnx2x/bnx2x_ethdev.c
@@ -113,5 +113,5 @@ bnx2x_interrupt_action(struct rte_eth_dev *dev)
 	uint32_t link_status;
 
-	bnx2x_intr_legacy(sc, 0);
+	bnx2x_intr_legacy(sc);
 
 	if (sc->periodic_flags & PERIODIC_GO)
diff --git a/drivers/net/bnx2x/ecore_sp.c b/drivers/net/bnx2x/ecore_sp.c
index 6d2bb815c..43194095b 100644
--- a/drivers/net/bnx2x/ecore_sp.c
+++ b/drivers/net/bnx2x/ecore_sp.c
@@ -292,12 +292,17 @@ static int ecore_state_wait(struct bnx2x_softc *sc, int state,
 
 	ECORE_MSG(sc, "waiting for state to become %d", state);
+	/* being over protective to remind bnx2x_intr_legacy() to
+	 * process RAMROD
+	 */
+	rte_atomic32_set(&sc->scan_fp, 1);
 
 	ECORE_MIGHT_SLEEP();
 	while (cnt--) {
-		bnx2x_intr_legacy(sc, 1);
+		bnx2x_intr_legacy(sc);
 		if (!ECORE_TEST_BIT(state, pstate)) {
 #ifdef ECORE_STOP_ON_ERROR
 			ECORE_MSG(sc, "exit  (cnt %d)", 5000 - cnt);
 #endif
+			rte_atomic32_set(&sc->scan_fp, 0);
 			return ECORE_SUCCESS;
 		}
@@ -305,10 +310,13 @@ static int ecore_state_wait(struct bnx2x_softc *sc, int state,
 		ECORE_WAIT(sc, delay_us);
 
-		if (sc->panic)
+		if (sc->panic) {
+			rte_atomic32_set(&sc->scan_fp, 0);
 			return ECORE_IO;
+		}
 	}
 
 	/* timeout! */
 	PMD_DRV_LOG(ERR, sc, "timeout waiting for state %d", state);
+	rte_atomic32_set(&sc->scan_fp, 0);
 #ifdef ECORE_STOP_ON_ERROR
 	ecore_panic();
-- 
2.20.1

---
  Diff of the applied patch vs upstream commit (please double-check if non-empty:
---
--- -	2019-05-08 11:05:06.006474401 +0100
+++ 0003-net-bnx2x-fix-ramrod-timeout.patch	2019-05-08 11:05:05.750934414 +0100
@@ -1 +1 @@
-From 8bd31421c593e5f3e2ee2a4d7d3c6a74489838c6 Mon Sep 17 00:00:00 2001
+From ec060662b2f4030f5e549755c1935ebe864e65fe Mon Sep 17 00:00:00 2001
@@ -5,0 +6,2 @@
+[ upstream commit 8bd31421c593e5f3e2ee2a4d7d3c6a74489838c6 ]
+
@@ -22 +23,0 @@
-Cc: stable@dpdk.org
@@ -108 +109 @@
-index 5b4c5cf84..bcb899a57 100644
+index c31821316..d5328e8d9 100644
@@ -111 +112 @@
-@@ -114,5 +114,5 @@ bnx2x_interrupt_action(struct rte_eth_dev *dev)
+@@ -113,5 +113,5 @@ bnx2x_interrupt_action(struct rte_eth_dev *dev)

  parent reply	other threads:[~2019-05-08 10:15 UTC|newest]

Thread overview: 54+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2019-05-08 10:14 [dpdk-stable] patch 'net/bnx2x: fix MTU for jumbo frame' " Kevin Traynor
2019-05-08 10:14 ` [dpdk-stable] patch 'net/bnx2x: fix memory leak' " Kevin Traynor
2019-05-08 10:14 ` Kevin Traynor [this message]
2019-05-08 10:14 ` [dpdk-stable] patch 'net/bnx2x: fix DMAE timeout' " Kevin Traynor
2019-05-08 10:14 ` [dpdk-stable] patch 'net/bnx2x: fix race for periodic flags' " Kevin Traynor
2019-05-08 10:14 ` [dpdk-stable] patch 'net/bnx2x: fix optic module verification' " Kevin Traynor
2019-05-08 10:14 ` [dpdk-stable] patch 'net/mlx5: fix RSS validation function' " Kevin Traynor
2019-05-08 10:14 ` [dpdk-stable] patch 'net/enetc: fix SMMU unhandled context fault' " Kevin Traynor
2019-05-08 10:14 ` [dpdk-stable] patch 'net/enetc: fix big endian build and buffer allocation' " Kevin Traynor
2019-05-08 10:14 ` [dpdk-stable] patch 'net/enetc: fix crash at high speed traffic' " Kevin Traynor
2019-05-08 10:14 ` [dpdk-stable] patch 'app/testpmd: set fixed flag for exact link speed' " Kevin Traynor
2019-05-08 10:20   ` Andrew Rybchenko
2019-05-08 10:26     ` Kevin Traynor
2019-05-08 10:14 ` [dpdk-stable] patch 'net/iavf: fix info get' " Kevin Traynor
2019-05-08 10:14 ` [dpdk-stable] patch 'crypto/virtio: fix IV offset' " Kevin Traynor
2019-05-08 10:14 ` [dpdk-stable] patch 'net/virtio: fix buffer leak on VLAN insert' " Kevin Traynor
2019-05-08 10:14 ` [dpdk-stable] patch 'net/virtio-user: fix return value check' " Kevin Traynor
2019-05-08 10:14 ` [dpdk-stable] patch 'vhost: fix device leak on connection add failure' " Kevin Traynor
2019-05-08 10:14 ` [dpdk-stable] patch 'vhost: fix null pointer checking' " Kevin Traynor
2019-05-08 10:15 ` [dpdk-stable] patch 'vhost: fix passing destroyed device to destroy callback' " Kevin Traynor
2019-05-08 10:15 ` [dpdk-stable] patch 'vhost: fix silent queue enabling with legacy guests' " Kevin Traynor
2019-05-08 10:15 ` [dpdk-stable] patch 'net/virtio: fix dangling pointer on failure' " Kevin Traynor
2019-05-08 10:15 ` [dpdk-stable] patch 'net/i40e: fix logging on VF close' " Kevin Traynor
2019-05-08 10:15 ` [dpdk-stable] patch 'net/mlx5: fix memory region cleanup' " Kevin Traynor
2019-05-08 10:15 ` [dpdk-stable] patch 'net/mlx4: " Kevin Traynor
2019-05-08 10:15 ` [dpdk-stable] patch 'net/cxgbe: fix colliding function names' " Kevin Traynor
2019-05-08 10:15 ` [dpdk-stable] patch 'net/tap: fix multi process reply buffer' " Kevin Traynor
2019-05-08 10:15 ` [dpdk-stable] patch 'bus/vmbus: fix resource leak on error' " Kevin Traynor
2019-05-08 10:15 ` [dpdk-stable] patch 'app/bbdev: replace sprintf with snprintf or strlcpy' " Kevin Traynor
2019-05-08 10:15 ` [dpdk-stable] patch 'power: fix thread-safety environment modification' " Kevin Traynor
2019-05-08 10:15 ` [dpdk-stable] patch 'examples/power: fix resource leak' " Kevin Traynor
2019-05-08 10:15 ` [dpdk-stable] patch 'examples/power: fix unreachable VF MAC init' " Kevin Traynor
2019-05-08 10:15 ` [dpdk-stable] patch 'examples/power: fix string null termination' " Kevin Traynor
2019-05-08 10:15 ` [dpdk-stable] patch 'examples/power: fix string overflow' " Kevin Traynor
2019-05-08 10:15 ` [dpdk-stable] patch 'examples/power: fix overflowed value' " Kevin Traynor
2019-05-08 10:15 ` [dpdk-stable] patch 'examples/power: fix build with some disabled PMDs' " Kevin Traynor
2019-05-08 10:15 ` [dpdk-stable] patch 'examples/vhost_scsi: fix null-check for parameter' " Kevin Traynor
2019-05-08 10:15 ` [dpdk-stable] patch 'net/i40e: fix dereference before null check in mbuf release' " Kevin Traynor
2019-05-08 10:15 ` [dpdk-stable] patch 'net/i40e: fix dereference before check when getting EEPROM' " Kevin Traynor
2019-05-08 10:15 ` [dpdk-stable] patch 'app/testpmd: fix variable use before null check' " Kevin Traynor
2019-05-08 10:15 ` [dpdk-stable] patch 'bitrate: fix unchecked return value' " Kevin Traynor
2019-05-08 10:15 ` [dpdk-stable] patch 'doc: fix heading levels in bbdev test guide' " Kevin Traynor
2019-05-08 10:15 ` [dpdk-stable] patch 'crypto/qat: fix null cipher algo for non 8-byte multiple' " Kevin Traynor
2019-05-08 10:15 ` [dpdk-stable] patch 'eventdev: fix crypto adapter' " Kevin Traynor
2019-05-08 10:15 ` [dpdk-stable] patch 'crypto/snow3g: add to meson build' " Kevin Traynor
2019-05-08 10:15 ` [dpdk-stable] patch 'crypto/kasumi: fix dependency check' " Kevin Traynor
2019-05-08 10:15 ` [dpdk-stable] patch 'crypto/zuc: " Kevin Traynor
2019-05-08 10:15 ` [dpdk-stable] patch 'net/ixgbe: fix warning with GCC 9' " Kevin Traynor
2019-05-08 10:15 ` [dpdk-stable] patch 'bus/fslmc: " Kevin Traynor
2019-05-08 10:15 ` [dpdk-stable] patch 'raw/skeleton: fix warnings " Kevin Traynor
2019-05-08 10:15 ` [dpdk-stable] patch 'raw/dpaa2_cmdif: " Kevin Traynor
2019-05-08 10:15 ` [dpdk-stable] patch 'build: fix meson binutils workaround' " Kevin Traynor
2019-05-08 10:15 ` [dpdk-stable] patch 'build: fix crash by disabling AVX512 with binutils 2.31' " Kevin Traynor
2019-05-08 10:15 ` [dpdk-stable] patch 'build: fix ninja install on FreeBSD' " 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=20190508101534.8984-3-ktraynor@redhat.com \
    --to=ktraynor@redhat.com \
    --cc=shshaikh@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).