diff mbox series

net/bnxt: refactor HWRM rings allocation routine

Message ID 20210219092803.12756-1-somnath.kotur@broadcom.com (mailing list archive)
State Awaiting Upstream
Delegated to: Ajit Khaparde
Headers show
Series net/bnxt: refactor HWRM rings allocation routine | expand

Checks

Context Check Description
ci/iol-testing success Testing PASS
ci/github-robot success github build: passed
ci/iol-intel-Performance success Performance Testing PASS
ci/travis-robot fail travis build: failed
ci/iol-broadcom-Functional success Functional Testing PASS
ci/iol-broadcom-Performance success Performance Testing PASS
ci/checkpatch success coding style OK

Commit Message

Somnath Kotur Feb. 19, 2021, 9:28 a.m. UTC
bnxt_alloc_hwrm_rings() was duplicating a snippet of code that was
already present in bnxt_alloc_hwrm_rx_ring() with just one line/function
invocation missing. Add that line and replace the snippet of code
with a call to bnxt_hwrm_alloc_rx_ring

Signed-off-by: Somnath Kotur <somnath.kotur@broadcom.com>
---
 drivers/net/bnxt/bnxt_ring.c | 59 ++++--------------------------------
 1 file changed, 6 insertions(+), 53 deletions(-)

Comments

Ajit Khaparde March 1, 2021, 12:37 a.m. UTC | #1
On Fri, Feb 19, 2021 at 1:28 AM Somnath Kotur
<somnath.kotur@broadcom.com> wrote:
>
> bnxt_alloc_hwrm_rings() was duplicating a snippet of code that was
> already present in bnxt_alloc_hwrm_rx_ring() with just one line/function
> invocation missing. Add that line and replace the snippet of code
> with a call to bnxt_hwrm_alloc_rx_ring
>
> Signed-off-by: Somnath Kotur <somnath.kotur@broadcom.com>
Patch applied to dpdk-next-net-brcm.

> ---
>  drivers/net/bnxt/bnxt_ring.c | 59 ++++--------------------------------
>  1 file changed, 6 insertions(+), 53 deletions(-)
>
> diff --git a/drivers/net/bnxt/bnxt_ring.c b/drivers/net/bnxt/bnxt_ring.c
> index ba23c1fa03..997dcdc28b 100644
> --- a/drivers/net/bnxt/bnxt_ring.c
> +++ b/drivers/net/bnxt/bnxt_ring.c
> @@ -581,6 +581,7 @@ int bnxt_alloc_hwrm_rx_ring(struct bnxt *bp, int queue_index)
>         struct bnxt_cp_ring_info *cpr = rxq->cp_ring;
>         struct bnxt_ring *cp_ring = cpr->cp_ring_struct;
>         struct bnxt_rx_ring_info *rxr = rxq->rx_ring;
> +       struct bnxt_coal coal;
>         int rc;
>
>         /*
> @@ -603,6 +604,9 @@ int bnxt_alloc_hwrm_rx_ring(struct bnxt *bp, int queue_index)
>                 bp->grp_info[queue_index].cp_fw_ring_id = cp_ring->fw_ring_id;
>         }
>
> +       bnxt_init_dflt_coal(&coal);
> +       bnxt_hwrm_set_ring_coal(bp, &coal, cp_ring->fw_ring_id);
> +
>         if (!BNXT_NUM_ASYNC_CPR(bp) && !queue_index) {
>                 /*
>                  * If a dedicated async event completion ring is not enabled,
> @@ -699,60 +703,9 @@ int bnxt_alloc_hwrm_rings(struct bnxt *bp)
>         bnxt_init_all_rings(bp);
>
>         for (i = 0; i < bp->rx_cp_nr_rings; i++) {
> -               struct bnxt_rx_queue *rxq = bp->rx_queues[i];
> -               struct bnxt_cp_ring_info *cpr = rxq->cp_ring;
> -               struct bnxt_ring *cp_ring = cpr->cp_ring_struct;
> -               struct bnxt_rx_ring_info *rxr = rxq->rx_ring;
> -
> -               /*
> -                * Storage for the cp ring is allocated based on worst-case
> -                * usage, the actual size to be used by hw is computed here.
> -                */
> -               cp_ring->ring_size = rxr->rx_ring_struct->ring_size * 2;
> -
> -               if (bp->eth_dev->data->scattered_rx)
> -                       cp_ring->ring_size *= AGG_RING_SIZE_FACTOR;
> -
> -               cp_ring->ring_mask = cp_ring->ring_size - 1;
> -
> -               if (bnxt_alloc_cmpl_ring(bp, i, cpr))
> -                       goto err_out;
> -
> -               if (BNXT_HAS_RING_GRPS(bp)) {
> -                       bp->grp_info[i].fw_stats_ctx = cpr->hw_stats_ctx_id;
> -                       bp->grp_info[i].cp_fw_ring_id = cp_ring->fw_ring_id;
> -               }
> -
> -               bnxt_hwrm_set_ring_coal(bp, &coal, cp_ring->fw_ring_id);
> -               if (!BNXT_NUM_ASYNC_CPR(bp) && !i) {
> -                       /*
> -                        * If a dedicated async event completion ring is not
> -                        * enabled, use the first completion ring as the default
> -                        * completion ring for async event handling.
> -                        */
> -                       bp->async_cp_ring = cpr;
> -                       rc = bnxt_hwrm_set_async_event_cr(bp);
> -                       if (rc)
> -                               goto err_out;
> -               }
> -
> -               if (bnxt_alloc_rx_ring(bp, i))
> -                       goto err_out;
> -
> -               if (bnxt_alloc_rx_agg_ring(bp, i))
> +               rc = bnxt_alloc_hwrm_rx_ring(bp, i);
> +               if (rc)
>                         goto err_out;
> -
> -               if (bnxt_init_one_rx_ring(rxq)) {
> -                       PMD_DRV_LOG(ERR, "bnxt_init_one_rx_ring failed!\n");
> -                       bnxt_rx_queue_release_op(rxq);
> -                       return -ENOMEM;
> -               }
> -               bnxt_db_write(&rxr->rx_db, rxr->rx_raw_prod);
> -               bnxt_db_write(&rxr->ag_db, rxr->ag_raw_prod);
> -               rxq->index = i;
> -#if defined(RTE_ARCH_X86) || defined(RTE_ARCH_ARM64)
> -               bnxt_rxq_vec_setup(rxq);
> -#endif
>         }
>
>         for (i = 0; i < bp->tx_cp_nr_rings; i++) {
> --
> 2.28.0.497.g54e85e7
>
diff mbox series

Patch

diff --git a/drivers/net/bnxt/bnxt_ring.c b/drivers/net/bnxt/bnxt_ring.c
index ba23c1fa03..997dcdc28b 100644
--- a/drivers/net/bnxt/bnxt_ring.c
+++ b/drivers/net/bnxt/bnxt_ring.c
@@ -581,6 +581,7 @@  int bnxt_alloc_hwrm_rx_ring(struct bnxt *bp, int queue_index)
 	struct bnxt_cp_ring_info *cpr = rxq->cp_ring;
 	struct bnxt_ring *cp_ring = cpr->cp_ring_struct;
 	struct bnxt_rx_ring_info *rxr = rxq->rx_ring;
+	struct bnxt_coal coal;
 	int rc;
 
 	/*
@@ -603,6 +604,9 @@  int bnxt_alloc_hwrm_rx_ring(struct bnxt *bp, int queue_index)
 		bp->grp_info[queue_index].cp_fw_ring_id = cp_ring->fw_ring_id;
 	}
 
+	bnxt_init_dflt_coal(&coal);
+	bnxt_hwrm_set_ring_coal(bp, &coal, cp_ring->fw_ring_id);
+
 	if (!BNXT_NUM_ASYNC_CPR(bp) && !queue_index) {
 		/*
 		 * If a dedicated async event completion ring is not enabled,
@@ -699,60 +703,9 @@  int bnxt_alloc_hwrm_rings(struct bnxt *bp)
 	bnxt_init_all_rings(bp);
 
 	for (i = 0; i < bp->rx_cp_nr_rings; i++) {
-		struct bnxt_rx_queue *rxq = bp->rx_queues[i];
-		struct bnxt_cp_ring_info *cpr = rxq->cp_ring;
-		struct bnxt_ring *cp_ring = cpr->cp_ring_struct;
-		struct bnxt_rx_ring_info *rxr = rxq->rx_ring;
-
-		/*
-		 * Storage for the cp ring is allocated based on worst-case
-		 * usage, the actual size to be used by hw is computed here.
-		 */
-		cp_ring->ring_size = rxr->rx_ring_struct->ring_size * 2;
-
-		if (bp->eth_dev->data->scattered_rx)
-			cp_ring->ring_size *= AGG_RING_SIZE_FACTOR;
-
-		cp_ring->ring_mask = cp_ring->ring_size - 1;
-
-		if (bnxt_alloc_cmpl_ring(bp, i, cpr))
-			goto err_out;
-
-		if (BNXT_HAS_RING_GRPS(bp)) {
-			bp->grp_info[i].fw_stats_ctx = cpr->hw_stats_ctx_id;
-			bp->grp_info[i].cp_fw_ring_id = cp_ring->fw_ring_id;
-		}
-
-		bnxt_hwrm_set_ring_coal(bp, &coal, cp_ring->fw_ring_id);
-		if (!BNXT_NUM_ASYNC_CPR(bp) && !i) {
-			/*
-			 * If a dedicated async event completion ring is not
-			 * enabled, use the first completion ring as the default
-			 * completion ring for async event handling.
-			 */
-			bp->async_cp_ring = cpr;
-			rc = bnxt_hwrm_set_async_event_cr(bp);
-			if (rc)
-				goto err_out;
-		}
-
-		if (bnxt_alloc_rx_ring(bp, i))
-			goto err_out;
-
-		if (bnxt_alloc_rx_agg_ring(bp, i))
+		rc = bnxt_alloc_hwrm_rx_ring(bp, i);
+		if (rc)
 			goto err_out;
-
-		if (bnxt_init_one_rx_ring(rxq)) {
-			PMD_DRV_LOG(ERR, "bnxt_init_one_rx_ring failed!\n");
-			bnxt_rx_queue_release_op(rxq);
-			return -ENOMEM;
-		}
-		bnxt_db_write(&rxr->rx_db, rxr->rx_raw_prod);
-		bnxt_db_write(&rxr->ag_db, rxr->ag_raw_prod);
-		rxq->index = i;
-#if defined(RTE_ARCH_X86) || defined(RTE_ARCH_ARM64)
-		bnxt_rxq_vec_setup(rxq);
-#endif
 	}
 
 	for (i = 0; i < bp->tx_cp_nr_rings; i++) {