diff for duplicates of <537AEEDB.2000001@lge.com> diff --git a/a/1.txt b/N1/1.txt index 6ff3e75..a612eb9 100644 --- a/a/1.txt +++ b/N1/1.txt @@ -5,3 +5,60 @@ Having discuss with Joonsoo, I'm adding fallback allocation after __alloc_from_c The fallback allocation works if CMA kernel options is turned on but CMA size is zero. --------------------- 8< ------------------------ + +>From 05e389683ddd07027e8acb61c25f3284f762300e Mon Sep 17 00:00:00 2001 +From: Gioh Kim <gioh.kim@lge.com> +Date: Tue, 20 May 2014 14:16:20 +0900 +Subject: [PATCH] arm: dma-mapping: fallback allocation for cma failure + +If CMA is turned on and CMA size is set to zero, kernel should +behave as if CMA was not enabled at compile time. +Fallback allocation is added for CMA allocation failure. + +Signed-off-by: Gioh Kim <gioh.kim@lge.com> +Signed-off-by: Joonsoo Kim <iamjoonsoo.kim@lge.com> +--- + arch/arm/mm/dma-mapping.c | 11 ++++++++--- + 1 file changed, 8 insertions(+), 3 deletions(-) + +diff --git a/arch/arm/mm/dma-mapping.c b/arch/arm/mm/dma-mapping.c +index 18e98df..2a6c883 100644 +--- a/arch/arm/mm/dma-mapping.c ++++ b/arch/arm/mm/dma-mapping.c +@@ -379,7 +379,7 @@ static int __init atomic_pool_init(void) + unsigned long *bitmap; + struct page *page; + struct page **pages; +- void *ptr; ++ void *ptr = NULL; + int bitmap_size = BITS_TO_LONGS(nr_pages) * sizeof(long); + + bitmap = kzalloc(bitmap_size, GFP_KERNEL); +@@ -393,9 +393,10 @@ static int __init atomic_pool_init(void) + if (IS_ENABLED(CONFIG_DMA_CMA)) + ptr = __alloc_from_contiguous(NULL, pool->size, prot, &page, + atomic_pool_init); +- else ++ if (!ptr) + ptr = __alloc_remap_buffer(NULL, pool->size, gfp, prot, &page, + atomic_pool_init); ++ + if (ptr) { + int i; + +@@ -703,8 +704,12 @@ static void *__dma_alloc(struct device *dev, size_t size, dma_addr_t *handle, + addr = __alloc_from_pool(size, &page); + else if (!IS_ENABLED(CONFIG_DMA_CMA)) + addr = __alloc_remap_buffer(dev, size, gfp, prot, &page, caller); +- else ++ else { + addr = __alloc_from_contiguous(dev, size, prot, &page, caller); ++ if (!addr) ++ addr = __alloc_remap_buffer(dev, size, gfp, prot, ++ &page, caller); ++ } + + if (addr) + *handle = pfn_to_dma(dev, page_to_pfn(page)); +-- +1.7.9.5 diff --git a/a/content_digest b/N1/content_digest index debb873..b269f79 100644 --- a/a/content_digest +++ b/N1/content_digest @@ -18,6 +18,63 @@ "Having discuss with Joonsoo, I'm adding fallback allocation after __alloc_from_contiguous().\n" "The fallback allocation works if CMA kernel options is turned on but CMA size is zero.\n" "\n" - --------------------- 8< ------------------------ + "--------------------- 8< ------------------------\n" + "\n" + ">From 05e389683ddd07027e8acb61c25f3284f762300e Mon Sep 17 00:00:00 2001\n" + "From: Gioh Kim <gioh.kim@lge.com>\n" + "Date: Tue, 20 May 2014 14:16:20 +0900\n" + "Subject: [PATCH] arm: dma-mapping: fallback allocation for cma failure\n" + "\n" + "If CMA is turned on and CMA size is set to zero, kernel should\n" + "behave as if CMA was not enabled at compile time.\n" + "Fallback allocation is added for CMA allocation failure.\n" + "\n" + "Signed-off-by: Gioh Kim <gioh.kim@lge.com>\n" + "Signed-off-by: Joonsoo Kim <iamjoonsoo.kim@lge.com>\n" + "---\n" + " arch/arm/mm/dma-mapping.c | 11 ++++++++---\n" + " 1 file changed, 8 insertions(+), 3 deletions(-)\n" + "\n" + "diff --git a/arch/arm/mm/dma-mapping.c b/arch/arm/mm/dma-mapping.c\n" + "index 18e98df..2a6c883 100644\n" + "--- a/arch/arm/mm/dma-mapping.c\n" + "+++ b/arch/arm/mm/dma-mapping.c\n" + "@@ -379,7 +379,7 @@ static int __init atomic_pool_init(void)\n" + " unsigned long *bitmap;\n" + " struct page *page;\n" + " struct page **pages;\n" + "- void *ptr;\n" + "+ void *ptr = NULL;\n" + " int bitmap_size = BITS_TO_LONGS(nr_pages) * sizeof(long);\n" + "\n" + " bitmap = kzalloc(bitmap_size, GFP_KERNEL);\n" + "@@ -393,9 +393,10 @@ static int __init atomic_pool_init(void)\n" + " if (IS_ENABLED(CONFIG_DMA_CMA))\n" + " ptr = __alloc_from_contiguous(NULL, pool->size, prot, &page,\n" + " atomic_pool_init);\n" + "- else\n" + "+ if (!ptr)\n" + " ptr = __alloc_remap_buffer(NULL, pool->size, gfp, prot, &page,\n" + " atomic_pool_init);\n" + "+\n" + " if (ptr) {\n" + " int i;\n" + "\n" + "@@ -703,8 +704,12 @@ static void *__dma_alloc(struct device *dev, size_t size, dma_addr_t *handle,\n" + " addr = __alloc_from_pool(size, &page);\n" + " else if (!IS_ENABLED(CONFIG_DMA_CMA))\n" + " addr = __alloc_remap_buffer(dev, size, gfp, prot, &page, caller);\n" + "- else\n" + "+ else {\n" + " addr = __alloc_from_contiguous(dev, size, prot, &page, caller);\n" + "+ if (!addr)\n" + "+ addr = __alloc_remap_buffer(dev, size, gfp, prot,\n" + "+ &page, caller);\n" + "+ }\n" + "\n" + " if (addr)\n" + " *handle = pfn_to_dma(dev, page_to_pfn(page));\n" + "--\n" + 1.7.9.5 -cb00a81d40d3cd16011e6a08d74ad09cc35ecb1a6aeb5f48b50e54c5ca90b389 +fdefd41e366e4d3c6436d6efb09a429d5d8ba664f763203bbe1f26b41e86e01f
This is an external index of several public inboxes, see mirroring instructions on how to clone and mirror all data and code used by this external index.