Skip to contentSkip to conversation

bnx2x: always reinitialize the rx queue indices

PATCH Applied Chas Williams 2 participants 2 messages Dec 9, 2015 – Dec 13, 2015 Network drivers

lore
Share & tools
lore
#0 lore raw

PATCH 1/1 bnx2x: always reinitialize the rx queue indices

If you stop and start the driver, the rx queue will have the previous index values when programming the adapter. Therefore, we should always reset the queue indices when the rx ring is setup. Note: We need to clear (write) the status block's completion queue index since it is possibly in a read cache.

Tidy some init code to make it clearer what the defaults are.

---
 drivers/net/bnx2x/bnx2x.c      | 16 +++++++++++-----
 drivers/net/bnx2x/bnx2x_rxtx.c |  2 +-
 2 files changed, 12 insertions(+), 6 deletions(-)
drivers/net/bnx2x/bnx2x.c +11 -5
index 294711f..d6e28a5 100644
@@ -5005,11 +5005,17 @@ static void bnx2x_init_rx_rings(struct bnx2x_softc *sc)
 			return;
 		}
 
-/*
- * Activate the BD ring...
- * Warning, this will generate an interrupt (to the TSTORM)
- * so this can only be done after the chip is initialized
- */
+		rxq->rx_bd_head = 0;
+		rxq->rx_bd_tail = rxq->nb_rx_desc;
+		rxq->rx_cq_head = 0;
+		rxq->rx_cq_tail = TOTAL_RCQ_ENTRIES(rxq);
+		*fp->rx_cq_cons_sb = 0;
+
+		/*
+		 * Activate the BD ring...
+		 * Warning, this will generate an interrupt (to the TSTORM)
+		 * so this can only be done after the chip is initialized
+		 */
 		bnx2x_update_rx_prod(sc, fp, rxq->rx_bd_tail, rxq->rx_cq_tail);
 
 		if (i != 0) {
drivers/net/bnx2x/bnx2x_rxtx.c +1 -1
index 9379127..89d93a1 100644
@@ -156,7 +156,7 @@ bnx2x_dev_rx_queue_setup(struct rte_eth_dev *dev,
 	rxq->pkt_first_seg = NULL;
 	rxq->pkt_last_seg = NULL;
 	rxq->rx_bd_head = 0;
-	rxq->rx_bd_tail = idx;
+	rxq->rx_bd_tail = rxq->nb_rx_desc;
 
 	/* Allocate CQ chain. */
 	dma_size = BNX2X_RX_CHAIN_PAGE_SZ * rxq->nb_cq_pages;
Signature · 1 line
2.1.0
#1 lore raw

2015-12-09 17:11, Chas Williams:

Quoted 9 lines

If you stop and start the driver, the rx queue will have the previous index values when programming the adapter. Therefore, we should always reset the queue indices when the rx ring is setup. Note: We need to clear (write) the status block's completion queue index since it is possibly in a read cache.

Tidy some init code to make it clearer what the defaults are.

Applied, thanks