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: 8bd31421c5 ("net/bnx2x: fix ramrod timeout")
Cc: stable@dpdk.org

Signed-off-by: Shahed Shaikh <shshaikh@marvell.com>
Acked-by: Rasesh Mody <rmody@marvell.com>
This commit is contained in:
Shahed Shaikh 2019-06-04 11:53:48 -07:00 committed by Ferruh Yigit
parent 4217cb0b7d
commit 08a6e472c3
2 changed files with 2 additions and 4 deletions

View 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);
}

View 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--) {