lists.openwall.net   lists  /  announce  owl-users  owl-dev  john-users  john-dev  passwdqc-users  yescrypt  popa3d-users  /  oss-security  kernel-hardening  musl  sabotage  tlsify  passwords  /  crypt-dev  xvendor  /  Bugtraq  Full-Disclosure  linux-kernel  linux-netdev  linux-ext4  linux-hardening  linux-cve-announce  PHC 
Open Source and information security mailing list archives
 
Hash Suite: Windows password security audit tool. GUI, reports in PDF.
[<prev] [next>] [thread-next>] [day] [month] [year] [list]
Date:	Thu, 17 Sep 2015 14:22:38 -0400
From:	jglisse@...hat.com
To:	iommu@...ts.linux-foundation.org
Cc:	Jérôme Glisse <jglisse@...hat.com>,
	Joerg Roedel <jroedel@...e.de>,
	Konrad Rzeszutek Wilk <Konrad.wilk@...cle.com>,
	Alex Deucher <alexander.deucher@....com>,
	Dave Airlie <airlied@...hat.com>, linux-kernel@...r.kernel.org
Subject: [RFC PATCH] dma/swiotlb: Add helper for device driver to opt-out from swiotlb.

From: Jérôme Glisse <jglisse@...hat.com>

The swiotlb dma backend is not appropriate for some devices like
GPU where bounce buffer or slow dma page allocations is just not
acceptable. With that helper device drivers can opt-out from the
swiotlb and just do sane things without wasting CPU cycles inside
the swiotlb code.

Signed-off-by: Jérôme Glisse <jglisse@...hat.com>
To: iommu@...ts.linux-foundation.org
Cc: Joerg Roedel <jroedel@...e.de>
Cc: Konrad Rzeszutek Wilk <Konrad.wilk@...cle.com>
Cc: Alex Deucher <alexander.deucher@....com>
CC: Dave Airlie <airlied@...hat.com>
CC: linux-kernel@...r.kernel.org
---
 arch/x86/include/asm/dma-mapping.h       |  3 +++
 arch/x86/kernel/pci-swiotlb.c            | 18 ++++++++++++++++++
 include/asm-generic/dma-mapping-common.h |  7 +++++++
 3 files changed, 28 insertions(+)

diff --git a/arch/x86/include/asm/dma-mapping.h b/arch/x86/include/asm/dma-mapping.h
index 953b726..b50745f 100644
--- a/arch/x86/include/asm/dma-mapping.h
+++ b/arch/x86/include/asm/dma-mapping.h
@@ -46,6 +46,9 @@ bool arch_dma_alloc_attrs(struct device **dev, gfp_t *gfp);
 #define HAVE_ARCH_DMA_SUPPORTED 1
 extern int dma_supported(struct device *hwdev, u64 mask);
 
+#define HAVE_ARCH_DMA_OVERRIDE_SWIOTLB 1
+int dma_override_swiotlb(struct device *dev);
+
 #include <asm-generic/dma-mapping-common.h>
 
 extern void *dma_generic_alloc_coherent(struct device *dev, size_t size,
diff --git a/arch/x86/kernel/pci-swiotlb.c b/arch/x86/kernel/pci-swiotlb.c
index adf0392..6a9efab 100644
--- a/arch/x86/kernel/pci-swiotlb.c
+++ b/arch/x86/kernel/pci-swiotlb.c
@@ -117,3 +117,21 @@ void __init pci_swiotlb_late_init(void)
 		swiotlb_print_info();
 	}
 }
+
+/* dma_override_swiotlb() -  Override swiotlb with nommu.
+ *
+ * @device: Device for which to disable swiotlb.
+ *
+ * The swiotlb infrastructure just get in the way for some devices like GPU,
+ * where things like bounce pages can not work properly or for which we do not
+ * want to take slow page allocation code path. This function allows device
+ * driver opportunity to opt-out from swiotlb.
+ */
+int dma_override_swiotlb(struct device *dev)
+{
+	if (dev->archdata.dma_ops != &swiotlb_dma_ops)
+		return 1;
+	dev->archdata.dma_ops = &nommu_dma_ops;
+	return 1;
+}
+EXPORT_SYMBOL(dma_override_swiotlb);
diff --git a/include/asm-generic/dma-mapping-common.h b/include/asm-generic/dma-mapping-common.h
index b1bc954..452d947 100644
--- a/include/asm-generic/dma-mapping-common.h
+++ b/include/asm-generic/dma-mapping-common.h
@@ -355,4 +355,11 @@ static inline int dma_set_mask(struct device *dev, u64 mask)
 }
 #endif
 
+#ifndef HAVE_ARCH_DMA_OVERRIDE_SWIOTLB
+static inline int dma_override_swiotlb(struct device *dev)
+{
+	return 0;
+}
+#endif
+
 #endif
-- 
2.1.0

--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@...r.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/

Powered by blists - more mailing lists

Powered by Openwall GNU/*/Linux Powered by OpenVZ