amd iommu: properly detach from protection domain on ->remove
authorChris Wright <chrisw@sous-sol.org>
Thu, 21 May 2009 07:56:58 +0000 (00:56 -0700)
committerJoerg Roedel <joerg.roedel@amd.com>
Thu, 28 May 2009 16:06:54 +0000 (18:06 +0200)
Some drivers may use the dma api during ->remove which will
cause a protection domain to get reattached to a device.  Delay the
detach until after the driver is completely unbound.

[ joro: added a little merge helper ]

[ Impact: fix too early device<->domain removal ]

Signed-off-by: Chris Wright <chrisw@redhat.com>
Signed-off-by: Joerg Roedel <joerg.roedel@amd.com>
arch/x86/kernel/amd_iommu.c

index a97db99..d689883 100644 (file)
@@ -57,6 +57,10 @@ static int dma_ops_unity_map(struct dma_ops_domain *dma_dom,
 static struct dma_ops_domain *find_protection_domain(u16 devid);
 
 
+#ifndef BUS_NOTIFY_UNBOUND_DRIVER
+#define BUS_NOTIFY_UNBOUND_DRIVER 0x0005
+#endif
+
 #ifdef CONFIG_AMD_IOMMU_STATS
 
 /*
@@ -1012,7 +1016,7 @@ static int device_change_notifier(struct notifier_block *nb,
                printk(KERN_INFO "AMD IOMMU: Using protection domain %d for "
                       "device %s\n", dma_domain->domain.id, dev_name(dev));
                break;
-       case BUS_NOTIFY_UNBIND_DRIVER:
+       case BUS_NOTIFY_UNBOUND_DRIVER:
                if (!domain)
                        goto out;
                detach_device(domain, devid);