All of lore.kernel.org
 help / color / mirror / Atom feed
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.