be2net: use adapter->flags to track SRIOV state
authorVasundhara Volam <vasundhara.volam@emulex.com>
Thu, 17 Jul 2014 10:50:31 +0000 (16:20 +0530)
committerDavid S. Miller <davem@davemloft.net>
Thu, 17 Jul 2014 23:38:15 +0000 (16:38 -0700)
The driver so far used adapter->num_vfs value to check if SR-IOV is enabled
or not. But, the patch bec84e6("create optimal number of queues on SR-IOV
config") changed this logic. The adapter->num_vfs value is validated and set
much before SR-IOV is enabled. So, we now use an explicit flag to track
SR-IOV enabled state.

Signed-off-by: Vasundhara Volam <vasundhara.volam@emulex.com>
Signed-off-by: Sathya Perla <sathya.perla@emulex.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
drivers/net/ethernet/emulex/benet/be.h
drivers/net/ethernet/emulex/benet/be_main.c

index 3e639e86e111670a8103b3d0f0ecd2a0eab36ac6..25cd3c9007e5ef6993c4675854168883d7c24613 100644 (file)
@@ -372,6 +372,7 @@ enum vf_state {
 };
 
 #define BE_FLAGS_LINK_STATUS_INIT              1
+#define BE_FLAGS_SRIOV_ENABLED                 (1 << 2)
 #define BE_FLAGS_WORKER_SCHEDULED              (1 << 3)
 #define BE_FLAGS_VLAN_PROMISC                  (1 << 4)
 #define BE_FLAGS_MCAST_PROMISC                 (1 << 5)
@@ -525,7 +526,8 @@ struct be_adapter {
 
 #define be_physfn(adapter)             (!adapter->virtfn)
 #define be_virtfn(adapter)             (adapter->virtfn)
-#define sriov_enabled(adapter)         (adapter->num_vfs > 0)
+#define sriov_enabled(adapter)         (adapter->flags &       \
+                                        BE_FLAGS_SRIOV_ENABLED)
 
 #define for_all_vfs(adapter, vf_cfg, i)                                        \
        for (i = 0, vf_cfg = &adapter->vf_cfg[i]; i < adapter->num_vfs; \
index 9ee445c8096e06f4db1966798b58fcfa95786413..9c50814f1e952b05188beb619bca2e525d7354c4 100644 (file)
@@ -3049,6 +3049,7 @@ static void be_vf_clear(struct be_adapter *adapter)
 done:
        kfree(adapter->vf_cfg);
        adapter->num_vfs = 0;
+       adapter->flags &= ~BE_FLAGS_SRIOV_ENABLED;
 }
 
 static void be_clear_queues(struct be_adapter *adapter)
@@ -3241,6 +3242,8 @@ static int be_vf_setup(struct be_adapter *adapter)
                        goto err;
                }
        }
+
+       adapter->flags |= BE_FLAGS_SRIOV_ENABLED;
        return 0;
 err:
        dev_err(dev, "VF setup failed\n");