mirror of
https://github.com/edk2-porting/linux-next.git
synced 2024-12-17 01:34:00 +08:00
i40e: Don't disable SR-IOV when VFs are assigned
When VFs are assigned to active VMs and we disable SR-IOV out from under them, bad things happen. Currently, the VM does not crash, but the VFs lose all resources and have no way to get them back. Add an additional check for when the user is disabling through sysfs, and add a comment to clarify why we check twice. Change-ID: Icad78eef516e4e1e4a87874d59132bc3baa058d4 Signed-off-by: Mitch Williams <mitch.a.williams@intel.com> Tested-by: Sibai Li <sibai.li@intel.com> Signed-off-by: Jeff Kirsher <jeffrey.t.kirsher@intel.com>
This commit is contained in:
parent
31cd840e6c
commit
9e5634dfb4
@ -842,6 +842,10 @@ void i40e_free_vfs(struct i40e_pf *pf)
|
||||
kfree(pf->vf);
|
||||
pf->vf = NULL;
|
||||
|
||||
/* This check is for when the driver is unloaded while VFs are
|
||||
* assigned. Setting the number of VFs to 0 through sysfs is caught
|
||||
* before this function ever gets called.
|
||||
*/
|
||||
if (!i40e_vfs_are_assigned(pf)) {
|
||||
pci_disable_sriov(pf->pdev);
|
||||
/* Acknowledge VFLR for all VFS. Without this, VFs will fail to
|
||||
@ -978,7 +982,12 @@ int i40e_pci_sriov_configure(struct pci_dev *pdev, int num_vfs)
|
||||
if (num_vfs)
|
||||
return i40e_pci_sriov_enable(pdev, num_vfs);
|
||||
|
||||
i40e_free_vfs(pf);
|
||||
if (!i40e_vfs_are_assigned(pf)) {
|
||||
i40e_free_vfs(pf);
|
||||
} else {
|
||||
dev_warn(&pdev->dev, "Unable to free VFs because some are assigned to VMs.\n");
|
||||
return -EINVAL;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user