Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit ecc72846 authored by Linus Torvalds's avatar Linus Torvalds
Browse files
Pull arm CMA fix from Marek Szyprowski:
 "This removes the ARMv6+ CMA dependency and lets one use old, well-
  tested dma-mapping implementation also on ARMv6+ systems without the
  need to use EXPERIMENTAL stuff."

Russell King complained (rightly) about the experimental feature being
forced on by the ARM config.

Here CMA is "continuous memory allocator", not "cross-memory attach".
We really neet to stop using insane TLA's for things that aren't big
industry standards.

* 'fixes-for-linus' of git://git.linaro.org/people/mszyprowski/linux-dma-mapping:
  ARM: dma-mapping: remove unconditional dependency on CMA
parents aa69cb8c f1ae98da
Loading
Loading
Loading
Loading
+0 −1
Original line number Diff line number Diff line
@@ -7,7 +7,6 @@ config ARM
	select HAVE_IDE if PCI || ISA || PCMCIA
	select HAVE_DMA_ATTRS
	select HAVE_DMA_CONTIGUOUS if (CPU_V6 || CPU_V6K || CPU_V7)
	select CMA if (CPU_V6 || CPU_V6K || CPU_V7)
	select HAVE_MEMBLOCK
	select RTC_LIB
	select SYS_SUPPORTS_APM_EMULATION
+4 −6
Original line number Diff line number Diff line
@@ -268,10 +268,8 @@ static int __init consistent_init(void)
	unsigned long base = consistent_base;
	unsigned long num_ptes = (CONSISTENT_END - base) >> PMD_SHIFT;

#ifndef CONFIG_ARM_DMA_USE_IOMMU
	if (cpu_architecture() >= CPU_ARCH_ARMv6)
	if (IS_ENABLED(CONFIG_CMA) && !IS_ENABLED(CONFIG_ARM_DMA_USE_IOMMU))
		return 0;
#endif

	consistent_pte = kmalloc(num_ptes * sizeof(pte_t), GFP_KERNEL);
	if (!consistent_pte) {
@@ -342,7 +340,7 @@ static int __init coherent_init(void)
	struct page *page;
	void *ptr;

	if (cpu_architecture() < CPU_ARCH_ARMv6)
	if (!IS_ENABLED(CONFIG_CMA))
		return 0;

	ptr = __alloc_from_contiguous(NULL, size, prot, &page);
@@ -704,7 +702,7 @@ static void *__dma_alloc(struct device *dev, size_t size, dma_addr_t *handle,

	if (arch_is_coherent() || nommu())
		addr = __alloc_simple_buffer(dev, size, gfp, &page);
	else if (cpu_architecture() < CPU_ARCH_ARMv6)
	else if (!IS_ENABLED(CONFIG_CMA))
		addr = __alloc_remap_buffer(dev, size, gfp, prot, &page, caller);
	else if (gfp & GFP_ATOMIC)
		addr = __alloc_from_pool(dev, size, &page, caller);
@@ -773,7 +771,7 @@ void arm_dma_free(struct device *dev, size_t size, void *cpu_addr,

	if (arch_is_coherent() || nommu()) {
		__dma_free_buffer(page, size);
	} else if (cpu_architecture() < CPU_ARCH_ARMv6) {
	} else if (!IS_ENABLED(CONFIG_CMA)) {
		__dma_free_remap(cpu_addr, size);
		__dma_free_buffer(page, size);
	} else {