diff options
-rw-r--r-- | drivers/net/ethernet/intel/ixgbe/ixgbe_sriov.c | 15 |
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 | ||