@@ -39,6 +39,7 @@
#include <linux/iommu.h>
#include <linux/rculist.h>
#include <linux/virtio.h>
+#include <linux/virtio_config.h>
#include <asm/io.h>
#include <asm/prom.h>
#include <asm/rtas.h>
@@ -51,6 +52,7 @@
#include <asm/udbg.h>
#include <asm/mmzone.h>
#include <asm/plpar_wrappers.h>
+#include <asm/svm.h>
#include "pseries.h"
@@ -1400,5 +1402,7 @@ machine_subsys_initcall_sync(pseries, tce_iommu_bus_notifier_init);
void platform_override_dma_ops(struct virtio_device *vdev)
{
- /* Override vdev->parent.dma_ops if required */
+ if (is_svm_platform() &&
+ !virtio_has_feature(vdev, VIRTIO_F_IOMMU_PLATFORM))
+ set_dma_ops(vdev->dev.parent, &swiotlb_dma_ops);
}