aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/net/ethernet/emulex/benet/be_main.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/net/ethernet/emulex/benet/be_main.c')
-rw-r--r--drivers/net/ethernet/emulex/benet/be_main.c21
1 files changed, 13 insertions, 8 deletions
diff --git a/drivers/net/ethernet/emulex/benet/be_main.c b/drivers/net/ethernet/emulex/benet/be_main.c
index 6c52a60dcdb7..b304b837f5bd 100644
--- a/drivers/net/ethernet/emulex/benet/be_main.c
+++ b/drivers/net/ethernet/emulex/benet/be_main.c
@@ -2783,6 +2783,8 @@ static void be_vf_clear(struct be_adapter *adapter)
2783 goto done; 2783 goto done;
2784 } 2784 }
2785 2785
2786 pci_disable_sriov(adapter->pdev);
2787
2786 for_all_vfs(adapter, vf_cfg, vf) { 2788 for_all_vfs(adapter, vf_cfg, vf) {
2787 if (lancer_chip(adapter)) 2789 if (lancer_chip(adapter))
2788 be_cmd_set_mac_list(adapter, NULL, 0, vf + 1); 2790 be_cmd_set_mac_list(adapter, NULL, 0, vf + 1);
@@ -2792,7 +2794,6 @@ static void be_vf_clear(struct be_adapter *adapter)
2792 2794
2793 be_cmd_if_destroy(adapter, vf_cfg->if_handle, vf + 1); 2795 be_cmd_if_destroy(adapter, vf_cfg->if_handle, vf + 1);
2794 } 2796 }
2795 pci_disable_sriov(adapter->pdev);
2796done: 2797done:
2797 kfree(adapter->vf_cfg); 2798 kfree(adapter->vf_cfg);
2798 adapter->num_vfs = 0; 2799 adapter->num_vfs = 0;
@@ -2889,13 +2890,8 @@ static int be_vf_setup(struct be_adapter *adapter)
2889 dev_info(dev, "Device supports %d VFs and not %d\n", 2890 dev_info(dev, "Device supports %d VFs and not %d\n",
2890 adapter->dev_num_vfs, num_vfs); 2891 adapter->dev_num_vfs, num_vfs);
2891 adapter->num_vfs = min_t(u16, num_vfs, adapter->dev_num_vfs); 2892 adapter->num_vfs = min_t(u16, num_vfs, adapter->dev_num_vfs);
2892 2893 if (!adapter->num_vfs)
2893 status = pci_enable_sriov(adapter->pdev, num_vfs);
2894 if (status) {
2895 dev_err(dev, "SRIOV enable failed\n");
2896 adapter->num_vfs = 0;
2897 return 0; 2894 return 0;
2898 }
2899 } 2895 }
2900 2896
2901 status = be_vf_setup_init(adapter); 2897 status = be_vf_setup_init(adapter);
@@ -2944,6 +2940,15 @@ static int be_vf_setup(struct be_adapter *adapter)
2944 2940
2945 be_cmd_enable_vf(adapter, vf + 1); 2941 be_cmd_enable_vf(adapter, vf + 1);
2946 } 2942 }
2943
2944 if (!old_vfs) {
2945 status = pci_enable_sriov(adapter->pdev, adapter->num_vfs);
2946 if (status) {
2947 dev_err(dev, "SRIOV enable failed\n");
2948 adapter->num_vfs = 0;
2949 goto err;
2950 }
2951 }
2947 return 0; 2952 return 0;
2948err: 2953err:
2949 dev_err(dev, "VF setup failed\n"); 2954 dev_err(dev, "VF setup failed\n");
@@ -3198,7 +3203,7 @@ static int be_setup(struct be_adapter *adapter)
3198 be_cmd_set_flow_control(adapter, adapter->tx_fc, 3203 be_cmd_set_flow_control(adapter, adapter->tx_fc,
3199 adapter->rx_fc); 3204 adapter->rx_fc);
3200 3205
3201 if (be_physfn(adapter) && num_vfs) { 3206 if (be_physfn(adapter)) {
3202 if (adapter->dev_num_vfs) 3207 if (adapter->dev_num_vfs)
3203 be_vf_setup(adapter); 3208 be_vf_setup(adapter);
3204 else 3209 else