]> git.droids-corp.org - dpdk.git/commitdiff
net/bnx2x: fix packet drop
authorShahed Shaikh <shshaikh@marvell.com>
Tue, 4 Jun 2019 18:53:48 +0000 (11:53 -0700)
committerFerruh Yigit <ferruh.yigit@intel.com>
Thu, 13 Jun 2019 14:54:30 +0000 (23:54 +0900)
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 <shshaikh@marvell.com>
Acked-by: Rasesh Mody <rmody@marvell.com>
drivers/net/bnx2x/bnx2x.c
drivers/net/bnx2x/ecore_sp.c

index e771e40cbaabd0d91c2ec900e15f9320117581a2..5f353a7ef7f03b412dba2edfcf98cce8259495be 100644 (file)
@@ -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);
 }
index 43194095bcf1a95699c7cb01643ae6032f464ec6..5ac22e725b286dd66d8449ddae8a42db93258267 100644 (file)
@@ -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--) {