diff options
| author | Weidong Han <weidong.han@intel.com> | 2008-12-08 10:29:53 -0500 |
|---|---|---|
| committer | Joerg Roedel <joerg.roedel@amd.com> | 2009-01-03 08:10:08 -0500 |
| commit | b653574a7d14b663cc812cb20be6a114939ba186 (patch) | |
| tree | 1fa1c833bacea5411e1c640180a00848552d7282 /virt | |
| parent | 0a920356748df4fb06e86c21c23d2ed6d31d37ad (diff) | |
Deassign device in kvm_free_assgined_device
In kvm_iommu_unmap_memslots(), assigned_dev_head is already empty.
Signed-off-by: Weidong Han <weidong.han@intel.com>
Signed-off-by: Joerg Roedel <joerg.roedel@amd.com>
Diffstat (limited to 'virt')
| -rw-r--r-- | virt/kvm/kvm_main.c | 1 | ||||
| -rw-r--r-- | virt/kvm/vtd.c | 10 |
2 files changed, 1 insertions, 10 deletions
diff --git a/virt/kvm/kvm_main.c b/virt/kvm/kvm_main.c index 3238e08e4651..4ef0fb43d1f9 100644 --- a/virt/kvm/kvm_main.c +++ b/virt/kvm/kvm_main.c | |||
| @@ -496,6 +496,7 @@ static int kvm_vm_ioctl_assign_device(struct kvm *kvm, | |||
| 496 | match->assigned_dev_id = assigned_dev->assigned_dev_id; | 496 | match->assigned_dev_id = assigned_dev->assigned_dev_id; |
| 497 | match->host_busnr = assigned_dev->busnr; | 497 | match->host_busnr = assigned_dev->busnr; |
| 498 | match->host_devfn = assigned_dev->devfn; | 498 | match->host_devfn = assigned_dev->devfn; |
| 499 | match->flags = assigned_dev->flags; | ||
| 499 | match->dev = dev; | 500 | match->dev = dev; |
| 500 | match->irq_source_id = -1; | 501 | match->irq_source_id = -1; |
| 501 | match->kvm = kvm; | 502 | match->kvm = kvm; |
diff --git a/virt/kvm/vtd.c b/virt/kvm/vtd.c index 174ea1f8cee5..d46de9af838b 100644 --- a/virt/kvm/vtd.c +++ b/virt/kvm/vtd.c | |||
| @@ -205,22 +205,12 @@ static int kvm_iommu_unmap_memslots(struct kvm *kvm) | |||
| 205 | 205 | ||
| 206 | int kvm_iommu_unmap_guest(struct kvm *kvm) | 206 | int kvm_iommu_unmap_guest(struct kvm *kvm) |
| 207 | { | 207 | { |
| 208 | struct kvm_assigned_dev_kernel *entry; | ||
| 209 | struct dmar_domain *domain = kvm->arch.intel_iommu_domain; | 208 | struct dmar_domain *domain = kvm->arch.intel_iommu_domain; |
| 210 | 209 | ||
| 211 | /* check if iommu exists and in use */ | 210 | /* check if iommu exists and in use */ |
| 212 | if (!domain) | 211 | if (!domain) |
| 213 | return 0; | 212 | return 0; |
| 214 | 213 | ||
| 215 | list_for_each_entry(entry, &kvm->arch.assigned_dev_head, list) { | ||
| 216 | printk(KERN_DEBUG "VT-d unmap: host bdf = %x:%x:%x\n", | ||
| 217 | entry->host_busnr, | ||
| 218 | PCI_SLOT(entry->host_devfn), | ||
| 219 | PCI_FUNC(entry->host_devfn)); | ||
| 220 | |||
| 221 | /* detach kvm dmar domain */ | ||
| 222 | intel_iommu_detach_device(domain, entry->dev); | ||
| 223 | } | ||
| 224 | kvm_iommu_unmap_memslots(kvm); | 214 | kvm_iommu_unmap_memslots(kvm); |
| 225 | intel_iommu_free_domain(domain); | 215 | intel_iommu_free_domain(domain); |
| 226 | return 0; | 216 | return 0; |
