]> git.droids-corp.org - dpdk.git/commitdiff
net/bnxt: fix ring teardown
authorAjit Khaparde <ajit.khaparde@broadcom.com>
Tue, 4 Jan 2022 08:38:20 +0000 (14:08 +0530)
committerAjit Khaparde <ajit.khaparde@broadcom.com>
Wed, 12 Jan 2022 01:59:42 +0000 (02:59 +0100)
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 <ajit.khaparde@broadcom.com>
Reviewed-by: Somnath Kotur <somnath.kotur@broadcom.com>
Reviewed-by: Kalesh AP <kalesh-anakkur.purayil@broadcom.com>
drivers/net/bnxt/bnxt_rxr.c
drivers/net/bnxt/bnxt_txr.c

index 9621809bd98e47d010cd44e56f9b03ea7cb678c2..b60c2470f39ec58ca9d7a630405af1f04656c3e8 100644 (file)
@@ -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;
 
index e2b7e405716650ab2e9e4fb5cd03838368a7c473..3b8f2382f92e341753ca21d4b44d2f2e5da454de 100644 (file)
@@ -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);