net/bnxt: refactor HWRM rings allocation routine
Checks
Commit Message
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
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
>
@@ -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++) {