提交 e464ef16 编写于 作者: G Gioh Kim 提交者: Marek Szyprowski

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: NGioh Kim <gioh.kim@lge.com>
Signed-off-by: NJoonsoo Kim <iamjoonsoo.kim@lge.com>
Acked-by: NMichal Nazarewicz <mina86@mina86.com>
[mszyprow: removed redundant empty line from the patch]
Signed-off-by: <m.szyprowski@samsung.com>
上级 006f841d
...@@ -390,7 +390,7 @@ static int __init atomic_pool_init(void) ...@@ -390,7 +390,7 @@ static int __init atomic_pool_init(void)
if (!pages) if (!pages)
goto no_pages; goto no_pages;
if (IS_ENABLED(CONFIG_DMA_CMA)) if (dev_get_cma_area(NULL))
ptr = __alloc_from_contiguous(NULL, pool->size, prot, &page, ptr = __alloc_from_contiguous(NULL, pool->size, prot, &page,
atomic_pool_init); atomic_pool_init);
else else
...@@ -701,7 +701,7 @@ static void *__dma_alloc(struct device *dev, size_t size, dma_addr_t *handle, ...@@ -701,7 +701,7 @@ static void *__dma_alloc(struct device *dev, size_t size, dma_addr_t *handle,
addr = __alloc_simple_buffer(dev, size, gfp, &page); addr = __alloc_simple_buffer(dev, size, gfp, &page);
else if (!(gfp & __GFP_WAIT)) else if (!(gfp & __GFP_WAIT))
addr = __alloc_from_pool(size, &page); addr = __alloc_from_pool(size, &page);
else if (!IS_ENABLED(CONFIG_DMA_CMA)) else if (!dev_get_cma_area(dev))
addr = __alloc_remap_buffer(dev, size, gfp, prot, &page, caller); addr = __alloc_remap_buffer(dev, size, gfp, prot, &page, caller);
else else
addr = __alloc_from_contiguous(dev, size, prot, &page, caller); 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,7 +790,7 @@ static void __arm_dma_free(struct device *dev, size_t size, void *cpu_addr,
__dma_free_buffer(page, size); __dma_free_buffer(page, size);
} else if (__free_from_pool(cpu_addr, size)) { } else if (__free_from_pool(cpu_addr, size)) {
return; return;
} else if (!IS_ENABLED(CONFIG_DMA_CMA)) { } else if (!dev_get_cma_area(dev)) {
__dma_free_remap(cpu_addr, size); __dma_free_remap(cpu_addr, size);
__dma_free_buffer(page, size); __dma_free_buffer(page, size);
} else { } else {
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册