aboutsummaryrefslogtreecommitdiffstats
path: root/arch/arm/mm/dma-mapping.c
diff options
context:
space:
mode:
authorGioh Kim <gioh.kim@lge.com>2014-05-22 00:38:23 -0400
committerMarek Szyprowski <m.szyprowski@samsung.com>2014-05-22 02:09:31 -0400
commite464ef16c4f080bb85ccf9085f92503b5b5b1e13 (patch)
tree4e0554952a1ec7de459131679a1e3138737d4eaf /arch/arm/mm/dma-mapping.c
parent006f841db1e0da8801aedc6751b563b28f9a6319 (diff)
arm: dma-mapping: add checking cma area initialized
If CMA is turned on and CMA size is set to zero, kernel should behave as if CMA was not enabled at compile time. Every dma allocation should check existence of cma area before requesting memory. Signed-off-by: Gioh Kim <gioh.kim@lge.com> Signed-off-by: Joonsoo Kim <iamjoonsoo.kim@lge.com> Acked-by: Michal Nazarewicz <mina86@mina86.com> [mszyprow: removed redundant empty line from the patch] Signed-off-by: <m.szyprowski@samsung.com>
Diffstat (limited to 'arch/arm/mm/dma-mapping.c')
-rw-r--r--arch/arm/mm/dma-mapping.c6
1 files changed, 3 insertions, 3 deletions
diff --git a/arch/arm/mm/dma-mapping.c b/arch/arm/mm/dma-mapping.c
index 3d43c418e41b..5bef858568e6 100644
--- a/arch/arm/mm/dma-mapping.c
+++ b/arch/arm/mm/dma-mapping.c
@@ -390,7 +390,7 @@ static int __init atomic_pool_init(void)
390 if (!pages) 390 if (!pages)
391 goto no_pages; 391 goto no_pages;
392 392
393 if (IS_ENABLED(CONFIG_DMA_CMA)) 393 if (dev_get_cma_area(NULL))
394 ptr = __alloc_from_contiguous(NULL, pool->size, prot, &page, 394 ptr = __alloc_from_contiguous(NULL, pool->size, prot, &page,
395 atomic_pool_init); 395 atomic_pool_init);
396 else 396 else
@@ -701,7 +701,7 @@ static void *__dma_alloc(struct device *dev, size_t size, dma_addr_t *handle,
701 addr = __alloc_simple_buffer(dev, size, gfp, &page); 701 addr = __alloc_simple_buffer(dev, size, gfp, &page);
702 else if (!(gfp & __GFP_WAIT)) 702 else if (!(gfp & __GFP_WAIT))
703 addr = __alloc_from_pool(size, &page); 703 addr = __alloc_from_pool(size, &page);
704 else if (!IS_ENABLED(CONFIG_DMA_CMA)) 704 else if (!dev_get_cma_area(dev))
705 addr = __alloc_remap_buffer(dev, size, gfp, prot, &page, caller); 705 addr = __alloc_remap_buffer(dev, size, gfp, prot, &page, caller);
706 else 706 else
707 addr = __alloc_from_contiguous(dev, size, prot, &page, caller); 707 addr = __alloc_from_contiguous(dev, size, prot, &page, caller);
@@ -790,7 +790,7 @@ static void __arm_dma_free(struct device *dev, size_t size, void *cpu_addr,
790 __dma_free_buffer(page, size); 790 __dma_free_buffer(page, size);
791 } else if (__free_from_pool(cpu_addr, size)) { 791 } else if (__free_from_pool(cpu_addr, size)) {
792 return; 792 return;
793 } else if (!IS_ENABLED(CONFIG_DMA_CMA)) { 793 } else if (!dev_get_cma_area(dev)) {
794 __dma_free_remap(cpu_addr, size); 794 __dma_free_remap(cpu_addr, size);
795 __dma_free_buffer(page, size); 795 __dma_free_buffer(page, size);
796 } else { 796 } else {