x86/amd-iommu: Fix deassignment of a device from the pt_domain
authorJoerg Roedel <joerg.roedel@amd.com>
Wed, 3 Feb 2010 15:13:41 +0000 (16:13 +0100)
committerGreg Kroah-Hartman <gregkh@suse.de>
Tue, 23 Feb 2010 15:37:56 +0000 (07:37 -0800)
commit d3ad9373b7c29b63d5e8460a69453718d200cc3b upstream.

Deassigning a device from the passthrough domain does not
work and breaks device assignment to kvm guests. This patch
fixes the issue.

Signed-off-by: Joerg Roedel <joerg.roedel@amd.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
arch/x86/kernel/amd_iommu.c

index ff964960e065e8204d35090d567364837c1935e2..23fc9fe1625f58494f2ff16780df93074b86916c 100644 (file)
@@ -1230,9 +1230,10 @@ static void __detach_device(struct protection_domain *domain, u16 devid)
 
        /*
         * If we run in passthrough mode the device must be assigned to the
-        * passthrough domain if it is detached from any other domain
+        * passthrough domain if it is detached from any other domain.
+        * Make sure we can deassign from the pt_domain itself.
         */
-       if (iommu_pass_through) {
+       if (iommu_pass_through && domain != pt_domain) {
                struct amd_iommu *iommu = amd_iommu_rlookup_table[devid];
                __attach_device(iommu, pt_domain, devid);
        }