iommu/amd: Ignore BUS_NOTIFY_UNBOUND_DRIVER event
authorJoerg Roedel <jroedel@suse.de>
Wed, 1 Apr 2015 12:58:45 +0000 (14:58 +0200)
committerJoerg Roedel <jroedel@suse.de>
Thu, 2 Apr 2015 11:31:07 +0000 (13:31 +0200)
Detaching a device from its domain at this event is
problematic for several reasons:

* The device might me in an alias group and
  detaching it will also detach all other devices in
  the group. This removes valid DMA mappings from
  the other devices causing io-page-faults and lets
  these devices fail.

* Devices might have unity mappings specified by the
  IVRS table. These mappings are required for the
  device even when no device driver is attached.
  Detaching the device from its domain in driver
  unbind will also remove these unity mappings.

This patch removes the handling of the BUS_NOTIFY_UNBOUND_DRIVER
event to prevent these issues and align it better with the
behavior of the VT-d driver.

Tested-by: Suravee Suthikulpanit <Suravee.Suthikulpanit@amd.com>
Signed-off-by: Joerg Roedel <jroedel@suse.de>
drivers/iommu/amd_iommu.c

index 8a1dea4d0d26d139f888913432be73ca4e68c49d..994cc7dbb8330c779df56db6b008f0cbb4dff80e 100644 (file)
@@ -2422,16 +2422,6 @@ static int device_change_notifier(struct notifier_block *nb,
        dev_data = get_dev_data(dev);
 
        switch (action) {
-       case BUS_NOTIFY_UNBOUND_DRIVER:
-
-               domain = domain_for_device(dev);
-
-               if (!domain)
-                       goto out;
-               if (dev_data->passthrough)
-                       break;
-               detach_device(dev);
-               break;
        case BUS_NOTIFY_ADD_DEVICE:
 
                iommu_init_device(dev);