From: Rahul Gupta <rahul.gu...@broadcom.com>

Initialize all rings to INVALID_HW_RING_ID.
This can be used to determine the rings to free if allocation fails.

Signed-off-by: Rahul Gupta <rahul.gu...@broadcom.com>
Reviewed-by: Venkat Duvvuru <venkatkumar.duvv...@broadcom.com>
Reviewed-by: Kalesh Anakkur Purayil <kalesh-anakkur.pura...@broadcom.com>
Reviewed-by: Ajit Khaparde <ajit.khapa...@broadcom.com>
Signed-off-by: Ajit Khaparde <ajit.khapa...@broadcom.com>
---
 drivers/net/bnxt/bnxt_ring.c | 37 ++++++++++++++++++++++++++++++++++++
 1 file changed, 37 insertions(+)

diff --git a/drivers/net/bnxt/bnxt_ring.c b/drivers/net/bnxt/bnxt_ring.c
index 119a6919f..f6e81d308 100644
--- a/drivers/net/bnxt/bnxt_ring.c
+++ b/drivers/net/bnxt/bnxt_ring.c
@@ -637,6 +637,42 @@ int bnxt_alloc_hwrm_rx_ring(struct bnxt *bp, int 
queue_index)
        return rc;
 }
 
+/* Initialise all rings to -1, its used to free rings later if allocation
+ * of few rings fails.
+ */
+static void bnxt_init_all_rings(struct bnxt *bp)
+{
+       unsigned int i = 0;
+       struct bnxt_rx_queue *rxq;
+       struct bnxt_ring *cp_ring;
+       struct bnxt_ring *ring;
+       struct bnxt_rx_ring_info *rxr;
+       struct bnxt_tx_queue *txq;
+
+       for (i = 0; i < bp->rx_cp_nr_rings; i++) {
+               rxq = bp->rx_queues[i];
+               /* Rx-compl */
+               cp_ring = rxq->cp_ring->cp_ring_struct;
+               cp_ring->fw_ring_id = INVALID_HW_RING_ID;
+               /* Rx-Reg */
+               rxr = rxq->rx_ring;
+               ring = rxr->rx_ring_struct;
+               ring->fw_ring_id = INVALID_HW_RING_ID;
+               /* Rx-AGG */
+               ring = rxr->ag_ring_struct;
+               ring->fw_ring_id = INVALID_HW_RING_ID;
+       }
+       for (i = 0; i < bp->tx_cp_nr_rings; i++) {
+               txq = bp->tx_queues[i];
+               /* Tx cmpl */
+               cp_ring = txq->cp_ring->cp_ring_struct;
+               cp_ring->fw_ring_id = INVALID_HW_RING_ID;
+               /*Tx Ring */
+               ring = txq->tx_ring->tx_ring_struct;
+               ring->fw_ring_id = INVALID_HW_RING_ID;
+       }
+}
+
 /* ring_grp usage:
  * [0] = default completion ring
  * [1 -> +rx_cp_nr_rings] = rx_cp, rx rings
@@ -650,6 +686,7 @@ int bnxt_alloc_hwrm_rings(struct bnxt *bp)
        int rc = 0;
 
        bnxt_init_dflt_coal(&coal);
+       bnxt_init_all_rings(bp);
 
        for (i = 0; i < bp->rx_cp_nr_rings; i++) {
                struct bnxt_rx_queue *rxq = bp->rx_queues[i];
-- 
2.20.1 (Apple Git-117)

Reply via email to