bnxt_en: Cap the returned MSIX vectors to the RDMA driver.
authorMichael Chan <michael.chan@broadcom.com>
Sat, 29 Jun 2019 15:16:47 +0000 (11:16 -0400)
committerDavid S. Miller <davem@davemloft.net>
Sun, 30 Jun 2019 23:00:26 +0000 (16:00 -0700)
In an earlier commit to improve NQ reservations on 57500 chips, we
set the resv_irqs on the 57500 VFs to the fixed value assigned by
the PF regardless of how many are actually used.  The current
code assumes that resv_irqs minus the ones used by the network driver
must be the ones for the RDMA driver.  This is no longer true and
we may return more MSIX vectors than requested, causing inconsistency.
Fix it by capping the value.

Fixes: 01989c6b69d9 ("bnxt_en: Improve NQ reservations.")
Signed-off-by: Michael Chan <michael.chan@broadcom.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
drivers/net/ethernet/broadcom/bnxt/bnxt_ulp.c

index bfa342a98d0812de0091c4b00c9a735da0e0b34d..fc77caf0a0769a18306ec974f58bd8fafd8fb5e0 100644 (file)
@@ -157,8 +157,10 @@ static int bnxt_req_msix_vecs(struct bnxt_en_dev *edev, int ulp_id,
 
        if (BNXT_NEW_RM(bp)) {
                struct bnxt_hw_resc *hw_resc = &bp->hw_resc;
+               int resv_msix;
 
-               avail_msix = hw_resc->resv_irqs - bp->cp_nr_rings;
+               resv_msix = hw_resc->resv_irqs - bp->cp_nr_rings;
+               avail_msix = min_t(int, resv_msix, avail_msix);
                edev->ulp_tbl[ulp_id].msix_requested = avail_msix;
        }
        bnxt_fill_msix_vecs(bp, ent);