i40e: fix sideband flow director vector allocation
authorStefan Assmann <sassmann@kpanic.de>
Mon, 19 Sep 2016 11:37:51 +0000 (13:37 +0200)
committerJeff Kirsher <jeffrey.t.kirsher@intel.com>
Tue, 4 Oct 2016 02:10:05 +0000 (19:10 -0700)
Currently if the MSI-X vector limit is reached the sideband flow
director gets disabled. A bit too early to make that decision, as
vectors may get re-distributed. So move the check further back.

Signed-off-by: Stefan Assmann <sassmann@kpanic.de>
Tested-by: Andrew Bowers <andrewx.bowers@intel.com>
Signed-off-by: Jeff Kirsher <jeffrey.t.kirsher@intel.com>
drivers/net/ethernet/intel/i40e/i40e_main.c

index ca7dd43abf5afcc6c58b812fc848068384cf553e..0044c29ca31e4b45dccc93c936a75b4d705aebea 100644 (file)
@@ -7641,7 +7641,6 @@ static int i40e_init_msix(struct i40e_pf *pf)
                        vectors_left--;
                } else {
                        pf->num_fdsb_msix = 0;
-                       pf->flags &= ~I40E_FLAG_FD_SB_ENABLED;
                }
        }
 
@@ -7738,7 +7737,6 @@ static int i40e_init_msix(struct i40e_pf *pf)
                pf->num_fcoe_qps = 0;
                pf->num_fcoe_msix = 0;
 #endif
-               pf->flags &= ~I40E_FLAG_FD_SB_ENABLED;
 
                /* partition out the remaining vectors */
                switch (vec) {
@@ -7770,6 +7768,10 @@ static int i40e_init_msix(struct i40e_pf *pf)
                                pf->num_vmdq_vsis = min_t(int, (vec / 2),
                                                  I40E_DEFAULT_NUM_VMDQ_VSI);
                        }
+                       if (pf->flags & I40E_FLAG_FD_SB_ENABLED) {
+                               pf->num_fdsb_msix = 1;
+                               vec--;
+                       }
                        pf->num_lan_msix = min_t(int,
                               (vec - (pf->num_iwarp_msix + pf->num_vmdq_vsis)),
                                                              pf->num_lan_msix);
@@ -7785,6 +7787,11 @@ static int i40e_init_msix(struct i40e_pf *pf)
                }
        }
 
+       if ((pf->flags & I40E_FLAG_FD_SB_ENABLED) &&
+           (pf->num_fdsb_msix == 0)) {
+               dev_info(&pf->pdev->dev, "Sideband Flowdir disabled, not enough MSI-X vectors\n");
+               pf->flags &= ~I40E_FLAG_FD_SB_ENABLED;
+       }
        if ((pf->flags & I40E_FLAG_VMDQ_ENABLED) &&
            (pf->num_vmdq_msix == 0)) {
                dev_info(&pf->pdev->dev, "VMDq disabled, not enough MSI-X vectors\n");