u32 vmdctl;
        int i;
 
+       /* set num VFs to 0 to prevent access to vfinfo */
+       adapter->num_vfs = 0;
+
+       /* free VF control structures */
+       kfree(adapter->vfinfo);
+       adapter->vfinfo = NULL;
+
+       /* free macvlan list */
+       kfree(adapter->mv_list);
+       adapter->mv_list = NULL;
+
 #ifdef CONFIG_PCI_IOV
        /* disable iov and allow time for transactions to clear */
        pci_disable_sriov(adapter->pdev);
                if (adapter->vfinfo[i].vfdev)
                        pci_dev_put(adapter->vfinfo[i].vfdev);
        }
-       kfree(adapter->vfinfo);
-       kfree(adapter->mv_list);
-       adapter->vfinfo = NULL;
 
-       adapter->num_vfs = 0;
        adapter->flags &= ~IXGBE_FLAG_SRIOV_ENABLED;
 }