From 08a6e472c3d7833ebe6cee0e1b3c601141a269ed Mon Sep 17 00:00:00 2001 From: Shahed Shaikh Date: Tue, 4 Jun 2019 11:53:48 -0700 Subject: [PATCH] net/bnx2x: fix packet drop Patch "8bd31421c593 ("net/bnx2x: fix ramrod timeout")" introduced a regression where sc->scan_fp flags is set for unexpectedly long time. So the slow path completion handler flow is run unnecessarily which walks over receive descriptor ring of fast path and drops the data packets while looking for slow path completion descriptor out of fast path ring. This issue is seen under heavy traffic with link events happening in background. Fixes: 8bd31421c593 ("net/bnx2x: fix ramrod timeout") Cc: stable@dpdk.org Signed-off-by: Shahed Shaikh Acked-by: Rasesh Mody --- drivers/net/bnx2x/bnx2x.c | 2 ++ drivers/net/bnx2x/ecore_sp.c | 4 ---- 2 files changed, 2 insertions(+), 4 deletions(-) diff --git a/drivers/net/bnx2x/bnx2x.c b/drivers/net/bnx2x/bnx2x.c index e771e40cba..5f353a7ef7 100644 --- a/drivers/net/bnx2x/bnx2x.c +++ b/drivers/net/bnx2x/bnx2x.c @@ -4572,6 +4572,8 @@ static void bnx2x_handle_fp_tq(struct bnx2x_fastpath *fp) } } + /* Assuming we have completed slow path completion, clear the flag */ + rte_atomic32_set(&sc->scan_fp, 0); bnx2x_ack_sb(sc, fp->igu_sb_id, USTORM_ID, le16toh(fp->fp_hc_idx), IGU_INT_ENABLE, 1); } diff --git a/drivers/net/bnx2x/ecore_sp.c b/drivers/net/bnx2x/ecore_sp.c index 43194095bc..5ac22e725b 100644 --- a/drivers/net/bnx2x/ecore_sp.c +++ b/drivers/net/bnx2x/ecore_sp.c @@ -291,10 +291,6 @@ static int ecore_state_wait(struct bnx2x_softc *sc, int state, cnt *= 20; 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--) {