|
@@ -8,6 +8,11 @@
|
|
|
#include <xen/xen.h>
|
|
|
#include <asm/iommu_table.h>
|
|
|
|
|
|
+#ifdef CONFIG_X86_64
|
|
|
+#include <asm/iommu.h>
|
|
|
+#include <asm/dma.h>
|
|
|
+#endif
|
|
|
+
|
|
|
int xen_swiotlb __read_mostly;
|
|
|
|
|
|
static struct dma_map_ops xen_swiotlb_dma_ops = {
|
|
@@ -49,6 +54,15 @@ int __init pci_xen_swiotlb_detect(void)
|
|
|
* the 'swiotlb' flag is the only one turning it on. */
|
|
|
swiotlb = 0;
|
|
|
|
|
|
+#ifdef CONFIG_X86_64
|
|
|
+ /* pci_swiotlb_detect_4gb turns on native SWIOTLB if no_iommu == 0
|
|
|
+ * (so no iommu=X command line over-writes).
|
|
|
+ * Considering that PV guests do not want the *native SWIOTLB* but
|
|
|
+ * only Xen SWIOTLB it is not useful to us so set no_iommu=1 here.
|
|
|
+ */
|
|
|
+ if (max_pfn > MAX_DMA32_PFN)
|
|
|
+ no_iommu = 1;
|
|
|
+#endif
|
|
|
return xen_swiotlb;
|
|
|
}
|
|
|
|