KVM: support device deassignment
[deliverable/linux.git] / virt / kvm / vtd.c
index 44bb58a395a5618ee86c90672e53171417a116d9..174ea1f8cee5f19b0c8213b5e76ca883bafc8c5b 100644 (file)
@@ -116,6 +116,30 @@ int kvm_assign_device(struct kvm *kvm,
        return 0;
 }
 
+int kvm_deassign_device(struct kvm *kvm,
+                       struct kvm_assigned_dev_kernel *assigned_dev)
+{
+       struct dmar_domain *domain = kvm->arch.intel_iommu_domain;
+       struct pci_dev *pdev = NULL;
+
+       /* check if iommu exists and in use */
+       if (!domain)
+               return 0;
+
+       pdev = assigned_dev->dev;
+       if (pdev == NULL)
+               return -ENODEV;
+
+       intel_iommu_detach_device(domain, pdev);
+
+       printk(KERN_DEBUG "deassign device: host bdf = %x:%x:%x\n",
+               assigned_dev->host_busnr,
+               PCI_SLOT(assigned_dev->host_devfn),
+               PCI_FUNC(assigned_dev->host_devfn));
+
+       return 0;
+}
+
 int kvm_iommu_map_guest(struct kvm *kvm)
 {
        int r;
This page took 0.037139 seconds and 5 git commands to generate.