net/bnxt: fix doorbell write ordering

Write completion queue doorbell before receive descriptor
doorbell to avoid possibility of completion queue overflow
when completion queue size is equal to receive descriptor
ring size. Remove unnecessary compiler barriers (db write
functions have the necessary barriers.)

Fixes: 637e34befd9c ("net/bnxt: optimize Rx processing")
Cc: stable@dpdk.org

Signed-off-by: Lance Richardson <lance.richardson@broadcom.com>
Reviewed-by: Ajit Khaparde <ajit.khaparde@broadcom.com>
Reviewed-by: Somnath Kotur <somnath.kotur@broadcom.com>
This commit is contained in:
Lance Richardson 2020-12-14 13:56:38 -05:00 committed by Ferruh Yigit
parent f0beaf8021
commit 73d1cc96be

View File

@ -917,17 +917,17 @@ uint16_t bnxt_recv_pkts(void *rx_queue, struct rte_mbuf **rx_pkts,
goto done;
}
rte_compiler_barrier();
/* Ring the completion queue doorbell. */
bnxt_db_cq(cpr);
/* Ring the receive descriptor doorbell. */
if (rx_raw_prod != rxr->rx_raw_prod)
bnxt_db_write(&rxr->rx_db, rxr->rx_raw_prod);
rte_compiler_barrier();
/* Ring the AGG ring DB */
if (ag_raw_prod != rxr->ag_raw_prod)
bnxt_db_write(&rxr->ag_db, rxr->ag_raw_prod);
bnxt_db_cq(cpr);
/* Attempt to alloc Rx buf in case of a previous allocation failure. */
if (rc == -ENOMEM) {
int i = RING_NEXT(rx_raw_prod);