]> git.karo-electronics.de Git - karo-tx-linux.git/commitdiff
iommu/amd: Fix hotplug with iommu=pt
authorJoerg Roedel <joerg.roedel@amd.com>
Thu, 19 Jul 2012 11:42:54 +0000 (13:42 +0200)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Thu, 9 Aug 2012 15:22:53 +0000 (08:22 -0700)
commit 2c9195e990297068d0f1f1bd8e2f1d09538009da upstream.

This did not work because devices are not put into the
pt_domain. Fix this.

Signed-off-by: Joerg Roedel <joerg.roedel@amd.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
drivers/iommu/amd_iommu.c

index 625626391f2d39d3802710a1677ac49ef3181c9a..3f365ab9f7c7a22eec9488dd2868ffba7551501f 100644 (file)
@@ -2254,6 +2254,18 @@ static int device_change_notifier(struct notifier_block *nb,
 
                iommu_init_device(dev);
 
+               /*
+                * dev_data is still NULL and
+                * got initialized in iommu_init_device
+                */
+               dev_data = get_dev_data(dev);
+
+               if (iommu_pass_through || dev_data->iommu_v2) {
+                       dev_data->passthrough = true;
+                       attach_device(dev, pt_domain);
+                       break;
+               }
+
                domain = domain_for_device(dev);
 
                /* allocate a protection domain if a device is added */
@@ -2271,10 +2283,7 @@ static int device_change_notifier(struct notifier_block *nb,
 
                dev_data = get_dev_data(dev);
 
-               if (!dev_data->passthrough)
-                       dev->archdata.dma_ops = &amd_iommu_dma_ops;
-               else
-                       dev->archdata.dma_ops = &nommu_dma_ops;
+               dev->archdata.dma_ops = &amd_iommu_dma_ops;
 
                break;
        case BUS_NOTIFY_DEL_DEVICE: