aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--drivers/net/ethernet/intel/ixgbe/ixgbe_sriov.c15
1 files changed, 11 insertions, 4 deletions
diff --git a/drivers/net/ethernet/intel/ixgbe/ixgbe_sriov.c b/drivers/net/ethernet/intel/ixgbe/ixgbe_sriov.c
index c7d831d6e212..4f22668b6aea 100644
--- a/drivers/net/ethernet/intel/ixgbe/ixgbe_sriov.c
+++ b/drivers/net/ethernet/intel/ixgbe/ixgbe_sriov.c
@@ -208,6 +208,17 @@ void ixgbe_disable_sriov(struct ixgbe_adapter *adapter)
208 u32 vmdctl; 208 u32 vmdctl;
209 int i; 209 int i;
210 210
211 /* set num VFs to 0 to prevent access to vfinfo */
212 adapter->num_vfs = 0;
213
214 /* free VF control structures */
215 kfree(adapter->vfinfo);
216 adapter->vfinfo = NULL;
217
218 /* free macvlan list */
219 kfree(adapter->mv_list);
220 adapter->mv_list = NULL;
221
211#ifdef CONFIG_PCI_IOV 222#ifdef CONFIG_PCI_IOV
212 /* disable iov and allow time for transactions to clear */ 223 /* disable iov and allow time for transactions to clear */
213 pci_disable_sriov(adapter->pdev); 224 pci_disable_sriov(adapter->pdev);
@@ -238,11 +249,7 @@ void ixgbe_disable_sriov(struct ixgbe_adapter *adapter)
238 if (adapter->vfinfo[i].vfdev) 249 if (adapter->vfinfo[i].vfdev)
239 pci_dev_put(adapter->vfinfo[i].vfdev); 250 pci_dev_put(adapter->vfinfo[i].vfdev);
240 } 251 }
241 kfree(adapter->vfinfo);
242 kfree(adapter->mv_list);
243 adapter->vfinfo = NULL;
244 252
245 adapter->num_vfs = 0;
246 adapter->flags &= ~IXGBE_FLAG_SRIOV_ENABLED; 253 adapter->flags &= ~IXGBE_FLAG_SRIOV_ENABLED;
247} 254}
248 255