bnx2x: fix restart

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.

Signed-off-by: Chas Williams <3chas3@gmail.com>
This commit is contained in:
Chas Williams 2015-12-09 17:11:04 -05:00 committed by Thomas Monjalon
parent bd372fe9c0
commit 7ee177a72f
2 changed files with 12 additions and 6 deletions

View File

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

View File

@ -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;