Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 9e5634df authored by Mitch Williams's avatar Mitch Williams Committed by Jeff Kirsher
Browse files

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: default avatarMitch Williams <mitch.a.williams@intel.com>
Tested-by: default avatarSibai Li <sibai.li@intel.com>
Signed-off-by: default avatarJeff Kirsher <jeffrey.t.kirsher@intel.com>
parent 31cd840e
Loading
Loading
Loading
Loading
+10 −1
Original line number Diff line number Diff line
@@ -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);

	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;
}