|
@@ -83,6 +83,8 @@ static struct iommu_ops amd_iommu_ops;
|
|
|
static ATOMIC_NOTIFIER_HEAD(ppr_notifier);
|
|
|
int amd_iommu_max_glx_val = -1;
|
|
|
|
|
|
+static struct dma_map_ops amd_iommu_dma_ops;
|
|
|
+
|
|
|
/*
|
|
|
* general struct to manage commands send to an IOMMU
|
|
|
*/
|
|
@@ -402,7 +404,7 @@ static void amd_iommu_stats_init(void)
|
|
|
return;
|
|
|
|
|
|
de_fflush = debugfs_create_bool("fullflush", 0444, stats_dir,
|
|
|
- (u32 *)&amd_iommu_unmap_flush);
|
|
|
+ &amd_iommu_unmap_flush);
|
|
|
|
|
|
amd_iommu_stats_add(&compl_wait);
|
|
|
amd_iommu_stats_add(&cnt_map_single);
|
|
@@ -2267,6 +2269,13 @@ static int device_change_notifier(struct notifier_block *nb,
|
|
|
list_add_tail(&dma_domain->list, &iommu_pd_list);
|
|
|
spin_unlock_irqrestore(&iommu_pd_list_lock, flags);
|
|
|
|
|
|
+ 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;
|
|
|
+
|
|
|
break;
|
|
|
case BUS_NOTIFY_DEL_DEVICE:
|
|
|
|