[dpdk-dev] [PATCH] net/bnxt: refactor HWRM rings allocation routine

Ajit Khaparde ajit.khaparde at broadcom.com
Mon Mar 1 01:37:52 CET 2021


On Fri, Feb 19, 2021 at 1:28 AM Somnath Kotur
<somnath.kotur at 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 at 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
>


More information about the dev mailing list