bnxt_en: Store the maximum NQs available on the PF.
authorMichael Chan <michael.chan@broadcom.com>
Sun, 16 Dec 2018 23:46:19 +0000 (18:46 -0500)
committerDavid S. Miller <davem@davemloft.net>
Tue, 18 Dec 2018 07:08:52 +0000 (23:08 -0800)
The PF has a pool of NQs and MSIX vectors assigned to it based on
NVRAM configurations.  The number of usable MSIX vectors on the PF
is the minimum of the NQs and MSIX vectors.  Any excess NQs without
associated MSIX may be used for the VFs, so we need to store this
max_nqs value.  max_nqs minus the NQs used by the PF will be the
available NQs for the VFs.

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
drivers/net/ethernet/broadcom/bnxt/bnxt.h

index 8a2e9cdd38ee813d7bfafdbbf15696fa816e846a..c65b5fe41abd568bd676f8bf739580b79e82725c 100644 (file)
@@ -6221,7 +6221,7 @@ int bnxt_hwrm_func_resc_qcaps(struct bnxt *bp, bool all)
        if (bp->flags & BNXT_FLAG_CHIP_P5) {
                u16 max_msix = le16_to_cpu(resp->max_msix);
 
-               hw_resc->max_irqs = min_t(u16, hw_resc->max_irqs, max_msix);
+               hw_resc->max_nqs = max_msix;
                hw_resc->max_hw_ring_grps = hw_resc->max_rx_rings;
        }
 
@@ -7059,6 +7059,9 @@ static unsigned int bnxt_get_max_func_irqs(struct bnxt *bp)
 {
        struct bnxt_hw_resc *hw_resc = &bp->hw_resc;
 
+       if (bp->flags & BNXT_FLAG_CHIP_P5)
+               return min_t(unsigned int, hw_resc->max_irqs, hw_resc->max_nqs);
+
        return min_t(unsigned int, hw_resc->max_irqs, hw_resc->max_cp_rings);
 }
 
index 3030931ccaf8afc25b4d42d4a8390a7692bcbbcd..d45cbb488e9d2263dbb1bb01d7bf67bcf4992344 100644 (file)
@@ -927,6 +927,7 @@ struct bnxt_hw_resc {
        u16     resv_vnics;
        u16     min_stat_ctxs;
        u16     max_stat_ctxs;
+       u16     max_nqs;
        u16     max_irqs;
        u16     resv_irqs;
 };