From: Ajit Khaparde Date: Tue, 4 Jan 2022 08:38:20 +0000 (+0530) Subject: net/bnxt: fix ring teardown X-Git-Url: http://git.droids-corp.org/?a=commitdiff_plain;h=54c6aad567839d4c9f0faa52093a2ef7641f77c3;p=dpdk.git net/bnxt: fix ring teardown Check for valid bit while scanning for hwrm_done completion during ring teardown. Not checking the valid bit could cause a ring overflow when we ring the doorbell. Fixes: 4fb6ab3f866d ("net/bnxt: check flush status during ring free") Cc: stable@dpdk.org Signed-off-by: Ajit Khaparde Reviewed-by: Somnath Kotur Reviewed-by: Kalesh AP --- diff --git a/drivers/net/bnxt/bnxt_rxr.c b/drivers/net/bnxt/bnxt_rxr.c index 9621809bd9..b60c2470f3 100644 --- a/drivers/net/bnxt/bnxt_rxr.c +++ b/drivers/net/bnxt/bnxt_rxr.c @@ -1411,6 +1411,9 @@ int bnxt_flush_rx_cmp(struct bnxt_cp_ring_info *cpr) cons = RING_CMP(cpr->cp_ring_struct, raw_cons); rxcmp = (struct rx_pkt_cmpl *)&cpr->cp_desc_ring[cons]; + if (!bnxt_cpr_cmp_valid(rxcmp, raw_cons, ring_mask + 1)) + break; + if (CMP_TYPE(rxcmp) == CMPL_BASE_TYPE_HWRM_DONE) return 1; diff --git a/drivers/net/bnxt/bnxt_txr.c b/drivers/net/bnxt/bnxt_txr.c index e2b7e40571..3b8f2382f9 100644 --- a/drivers/net/bnxt/bnxt_txr.c +++ b/drivers/net/bnxt/bnxt_txr.c @@ -602,6 +602,9 @@ int bnxt_flush_tx_cmp(struct bnxt_cp_ring_info *cpr) cons = RING_CMPL(ring_mask, raw_cons); txcmp = (struct tx_cmpl *)&cp_desc_ring[cons]; + if (!bnxt_cpr_cmp_valid(txcmp, raw_cons, ring_mask + 1)) + break; + opaque = rte_cpu_to_le_32(txcmp->opaque); raw_cons = NEXT_RAW_CMP(raw_cons);