diff options
author | Greg Rose <gregory.v.rose@intel.com> | 2011-07-22 01:46:07 -0400 |
---|---|---|
committer | Jeff Kirsher <jeffrey.t.kirsher@intel.com> | 2011-09-23 12:05:44 -0400 |
commit | 6777829cfe1c4ed78319ad40aaee60254222da76 (patch) | |
tree | 03e55538247c4b2fbdc837984922a0ac8753b253 /virt/kvm/iommu.c | |
parent | 9c9b1f24f2aa31a3cea94939edc551f68ebadc89 (diff) |
pci: Add flag indicating device has been assigned by KVM
Device drivers that create and destroy SR-IOV virtual functions via
calls to pci_enable_sriov() and pci_disable_sriov can cause catastrophic
failures if they attempt to destroy VFs while they are assigned to
guest virtual machines. By adding a flag for use by the KVM module
to indicate that a device is assigned a device driver can check that
flag and avoid destroying VFs while they are assigned and avoid system
failures.
CC: Ian Campbell <ijc@hellion.org.uk>
CC: Konrad Wilk <konrad.wilk@oracle.com>
Signed-off-by: Greg Rose <gregory.v.rose@intel.com>
Acked-by: Jesse Barnes <jbarnes@virtuousgeek.org>
Signed-off-by: Jeff Kirsher <jeffrey.t.kirsher@intel.com>
Diffstat (limited to 'virt/kvm/iommu.c')
-rw-r--r-- | virt/kvm/iommu.c | 4 |
1 files changed, 4 insertions, 0 deletions
diff --git a/virt/kvm/iommu.c b/virt/kvm/iommu.c index 78c80f67f535..967aba133a62 100644 --- a/virt/kvm/iommu.c +++ b/virt/kvm/iommu.c | |||
@@ -187,6 +187,8 @@ int kvm_assign_device(struct kvm *kvm, | |||
187 | goto out_unmap; | 187 | goto out_unmap; |
188 | } | 188 | } |
189 | 189 | ||
190 | pdev->dev_flags |= PCI_DEV_FLAGS_ASSIGNED; | ||
191 | |||
190 | printk(KERN_DEBUG "assign device %x:%x:%x.%x\n", | 192 | printk(KERN_DEBUG "assign device %x:%x:%x.%x\n", |
191 | assigned_dev->host_segnr, | 193 | assigned_dev->host_segnr, |
192 | assigned_dev->host_busnr, | 194 | assigned_dev->host_busnr, |
@@ -215,6 +217,8 @@ int kvm_deassign_device(struct kvm *kvm, | |||
215 | 217 | ||
216 | iommu_detach_device(domain, &pdev->dev); | 218 | iommu_detach_device(domain, &pdev->dev); |
217 | 219 | ||
220 | pdev->dev_flags &= ~PCI_DEV_FLAGS_ASSIGNED; | ||
221 | |||
218 | printk(KERN_DEBUG "deassign device %x:%x:%x.%x\n", | 222 | printk(KERN_DEBUG "deassign device %x:%x:%x.%x\n", |
219 | assigned_dev->host_segnr, | 223 | assigned_dev->host_segnr, |
220 | assigned_dev->host_busnr, | 224 | assigned_dev->host_busnr, |