|
@@ -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:
|