]> www.infradead.org Git - users/jedix/linux-maple.git/commitdiff
i40e: check if vectors are already depleted when doing VMDq allocation
authorStefan Assmann <sassmann@kpanic.de>
Mon, 19 Sep 2016 11:37:49 +0000 (13:37 +0200)
committerDhaval Giani <dhaval.giani@oracle.com>
Wed, 8 Mar 2017 00:39:52 +0000 (19:39 -0500)
Orabug: 24568124

During MSI-X vector allocation for VMDq, a check for "no vectors left"
was missing, add it. This prevents more vectors to be allocated than
available.

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>
(cherry picked from commit 9ca57e97a75780a7f9b8e93e83ab1e36dbfd9846)
Signed-off-by: Brian Maly <brian.maly@oracle.com>
Signed-off-by: Dhaval Giani <dhaval.giani@oracle.com>
drivers/net/ethernet/intel/i40e/i40e_main.c

index 9a4c767f7046bef1d2e8e0c03127e7dc296afdad..d185f49bba2a10aefadd435f760362663ec4cdde 100644 (file)
@@ -7579,18 +7579,23 @@ static int i40e_init_msix(struct i40e_pf *pf)
                int vmdq_vecs_wanted = pf->num_vmdq_vsis * pf->num_vmdq_qps;
                int vmdq_vecs = min_t(int, vectors_left, vmdq_vecs_wanted);
 
-               /* if we're short on vectors for what's desired, we limit
-                * the queues per vmdq.  If this is still more than are
-                * available, the user will need to change the number of
-                * queues/vectors used by the PF later with the ethtool
-                * channels command
-                */
-               if (vmdq_vecs < vmdq_vecs_wanted)
-                       pf->num_vmdq_qps = 1;
-               pf->num_vmdq_msix = pf->num_vmdq_qps;
+               if (!vectors_left) {
+                       pf->num_vmdq_msix = 0;
+                       pf->num_vmdq_qps = 0;
+               } else {
+                       /* if we're short on vectors for what's desired, we limit
+                        * the queues per vmdq.  If this is still more than are
+                        * available, the user will need to change the number of
+                        * queues/vectors used by the PF later with the ethtool
+                        * channels command
+                        */
+                       if (vmdq_vecs < vmdq_vecs_wanted)
+                               pf->num_vmdq_qps = 1;
+                       pf->num_vmdq_msix = pf->num_vmdq_qps;
 
-               v_budget += vmdq_vecs;
-               vectors_left -= vmdq_vecs;
+                       v_budget += vmdq_vecs;
+                       vectors_left -= vmdq_vecs;
+               }
        }
 
        pf->msix_entries = kcalloc(v_budget, sizeof(struct msix_entry),