]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
bnxt_en: Refactor bnxt_need_reserve_rings()
authorMichael Chan <michael.chan@broadcom.com>
Sat, 7 Feb 2026 23:51:17 +0000 (15:51 -0800)
committerJakub Kicinski <kuba@kernel.org>
Wed, 11 Feb 2026 04:17:36 +0000 (20:17 -0800)
bnxt_need_reserve_rings() checks 6 ring resources against the reserved
values to determine if a new reservation is needed.  Factor out the code
to collect the total resources into a new helper function
bnxt_get_total_resources() to make the code cleaner and easier to read.
Instead of individual scalar variables, use the struct bnxt_hw_rings to
hold all the ring resources.  Using the struct, hwr.cp replaces the nq
variable and the chip specific hwr.cp_p5 replaces cp on newer chips.

There is no change in behavior.  This will make it easier to check the
RSS context resource in the next patch.

Reviewed-by: Andy Gospodarek <andrew.gospodarek@broadcom.com>
Signed-off-by: Michael Chan <michael.chan@broadcom.com>
Reviewed-by: Joe Damato <joe@dama.to>
Link: https://patch.msgid.link/20260207235118.1987301-2-michael.chan@broadcom.com
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
drivers/net/ethernet/broadcom/bnxt/bnxt.c

index 72a8ca76c1e233a30978f15c85d68a2038f00bb2..98a1cbcc122e5aa02e3edb270c1d7abe3e7de3b3 100644 (file)
@@ -7951,13 +7951,27 @@ static int bnxt_get_total_vnics(struct bnxt *bp, int rx_rings)
        return 1;
 }
 
+static void bnxt_get_total_resources(struct bnxt *bp, struct bnxt_hw_rings *hwr)
+{
+       hwr->cp = bnxt_nq_rings_in_use(bp);
+       hwr->cp_p5 = 0;
+       if (bp->flags & BNXT_FLAG_CHIP_P5_PLUS)
+               hwr->cp_p5 = bnxt_cp_rings_in_use(bp);
+       hwr->tx = bp->tx_nr_rings;
+       hwr->rx = bp->rx_nr_rings;
+       hwr->grp = hwr->rx;
+       hwr->vnic = bnxt_get_total_vnics(bp, hwr->rx);
+       if (bp->flags & BNXT_FLAG_AGG_RINGS)
+               hwr->rx <<= 1;
+       hwr->stat = bnxt_get_func_stat_ctxs(bp);
+}
+
 static bool bnxt_need_reserve_rings(struct bnxt *bp)
 {
        struct bnxt_hw_resc *hw_resc = &bp->hw_resc;
-       int cp = bnxt_cp_rings_in_use(bp);
-       int nq = bnxt_nq_rings_in_use(bp);
-       int rx = bp->rx_nr_rings, stat;
-       int vnic, grp = rx;
+       struct bnxt_hw_rings hwr;
+
+       bnxt_get_total_resources(bp, &hwr);
 
        /* Old firmware does not need RX ring reservations but we still
         * need to setup a default RSS map when needed.  With new firmware
@@ -7967,25 +7981,26 @@ static bool bnxt_need_reserve_rings(struct bnxt *bp)
        if (!BNXT_NEW_RM(bp))
                bnxt_check_rss_tbl_no_rmgr(bp);
 
-       if (hw_resc->resv_tx_rings != bp->tx_nr_rings &&
-           bp->hwrm_spec_code >= 0x10601)
+       if (hw_resc->resv_tx_rings != hwr.tx && bp->hwrm_spec_code >= 0x10601)
                return true;
 
        if (!BNXT_NEW_RM(bp))
                return false;
 
-       vnic = bnxt_get_total_vnics(bp, rx);
-
-       if (bp->flags & BNXT_FLAG_AGG_RINGS)
-               rx <<= 1;
-       stat = bnxt_get_func_stat_ctxs(bp);
-       if (hw_resc->resv_rx_rings != rx || hw_resc->resv_cp_rings != cp ||
-           hw_resc->resv_vnics != vnic || hw_resc->resv_stat_ctxs != stat ||
-           (hw_resc->resv_hw_ring_grps != grp &&
+       if (hw_resc->resv_rx_rings != hwr.rx ||
+           hw_resc->resv_vnics != hwr.vnic ||
+           hw_resc->resv_stat_ctxs != hwr.stat ||
+           (hw_resc->resv_hw_ring_grps != hwr.grp &&
             !(bp->flags & BNXT_FLAG_CHIP_P5_PLUS)))
                return true;
+       if (bp->flags & BNXT_FLAG_CHIP_P5_PLUS) {
+               if (hw_resc->resv_cp_rings != hwr.cp_p5)
+                       return true;
+       } else if (hw_resc->resv_cp_rings != hwr.cp) {
+               return true;
+       }
        if ((bp->flags & BNXT_FLAG_CHIP_P5_PLUS) && BNXT_PF(bp) &&
-           hw_resc->resv_irqs != nq)
+           hw_resc->resv_irqs != hwr.cp)
                return true;
        return false;
 }