bnxt_en: Improve NQ reservations.
authorMichael Chan <michael.chan@broadcom.com>
Sun, 5 May 2019 11:17:05 +0000 (07:17 -0400)
committerDavid S. Miller <davem@davemloft.net>
Mon, 6 May 2019 04:42:17 +0000 (21:42 -0700)
bnxt_need_reserve_rings() determines if any resources have changed and
requires new reservation with firmware.  The NQ checking is currently
just an approximation.  Improve the NQ checking logic to make it
accurate.  NQ reservation is only needed on 57500 PFs.  This fix will
eliminate unnecessary reservations and will reduce NQ reservations
when some NQs have been released on 57500 PFs.

Fixes: c0b8cda05e1d ("bnxt_en: Fix NQ/CP rings accounting on the new 57500 chips.")
Signed-off-by: Michael Chan <michael.chan@broadcom.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
drivers/net/ethernet/broadcom/bnxt/bnxt.c

index d70320cfbc3ffe8fc8a83dc6225306e85c7dc6c6..cdbadc6349476364a78a2593111b5b9c35307000 100644 (file)
@@ -5521,11 +5521,13 @@ static bool bnxt_need_reserve_rings(struct bnxt *bp)
        stat = bnxt_get_func_stat_ctxs(bp);
        if (BNXT_NEW_RM(bp) &&
            (hw_resc->resv_rx_rings != rx || hw_resc->resv_cp_rings != cp ||
-            hw_resc->resv_irqs < nq || hw_resc->resv_vnics != vnic ||
-            hw_resc->resv_stat_ctxs != stat ||
+            hw_resc->resv_vnics != vnic || hw_resc->resv_stat_ctxs != stat ||
             (hw_resc->resv_hw_ring_grps != grp &&
              !(bp->flags & BNXT_FLAG_CHIP_P5))))
                return true;
+       if ((bp->flags & BNXT_FLAG_CHIP_P5) && BNXT_PF(bp) &&
+           hw_resc->resv_irqs != nq)
+               return true;
        return false;
 }