i40e: keep SR-IOV enabled in the case that RSS, VMDQ, FD_SB and DCB are disabled
authorFrank Zhang <frank_1.zhang@intel.com>
Tue, 20 May 2014 08:01:42 +0000 (08:01 +0000)
committerJeff Kirsher <jeffrey.t.kirsher@intel.com>
Mon, 9 Jun 2014 07:27:57 +0000 (00:27 -0700)
Modify the logic in i40e_determine_queue_usage() so that
SR-IOV doesn't get turned off unnecessarily.

Change-ID: I86ca304fa9f742a50e9ea831b887f358a6a9d53d
Signed-off-by: Frank Zhang <frank_1.zhang@intel.com>
Signed-off-by: Jeff Kirsher <jeffrey.t.kirsher@intel.com>
drivers/net/ethernet/intel/i40e/i40e_main.c

index eb32c5c..b5f0dea 100644 (file)
@@ -8180,9 +8180,7 @@ static void i40e_determine_queue_usage(struct i40e_pf *pf)
        queues_left = pf->hw.func_caps.num_tx_qp;
 
        if ((queues_left == 1) ||
-           !(pf->flags & I40E_FLAG_MSIX_ENABLED) ||
-           !(pf->flags & (I40E_FLAG_RSS_ENABLED | I40E_FLAG_FD_SB_ENABLED |
-                          I40E_FLAG_DCB_ENABLED))) {
+           !(pf->flags & I40E_FLAG_MSIX_ENABLED)) {
                /* one qp for PF, no queues for anything else */
                queues_left = 0;
                pf->rss_size = pf->num_lan_qps = 1;
@@ -8194,6 +8192,18 @@ static void i40e_determine_queue_usage(struct i40e_pf *pf)
                               I40E_FLAG_DCB_ENABLED    |
                               I40E_FLAG_SRIOV_ENABLED  |
                               I40E_FLAG_VMDQ_ENABLED);
+       } else if (!(pf->flags & (I40E_FLAG_RSS_ENABLED |
+                                 I40E_FLAG_FD_SB_ENABLED |
+                                 I40E_FLAG_DCB_ENABLED))) {
+               /* one qp for PF */
+               pf->rss_size = pf->num_lan_qps = 1;
+               queues_left -= pf->num_lan_qps;
+
+               pf->flags &= ~(I40E_FLAG_RSS_ENABLED    |
+                              I40E_FLAG_FD_SB_ENABLED  |
+                              I40E_FLAG_FD_ATR_ENABLED |
+                              I40E_FLAG_DCB_ENABLED    |
+                              I40E_FLAG_VMDQ_ENABLED);
        } else {
                /* Not enough queues for all TCs */
                if ((pf->flags & I40E_FLAG_DCB_ENABLED) &&