ARM: dma-mapping: simplify dma_cache_maint_page
authorRussell King <rmk+kernel@arm.linux.org.uk>
Tue, 24 Nov 2009 14:41:01 +0000 (14:41 +0000)
committerRussell King <rmk+kernel@arm.linux.org.uk>
Mon, 15 Feb 2010 15:22:16 +0000 (15:22 +0000)
dma_cache_maint_contiguous is now simple enough to live inside
dma_cache_maint_page, so move it there.

Signed-off-by: Russell King <rmk+kernel@arm.linux.org.uk>
Tested-By: Santosh Shilimkar <santosh.shilimkar@ti.com>
arch/arm/mm/dma-mapping.c

index 77dc483..0d68d2c 100644 (file)
@@ -446,24 +446,6 @@ void ___dma_single_dev_to_cpu(const void *kaddr, size_t size,
 }
 EXPORT_SYMBOL(___dma_single_dev_to_cpu);
 
-static void dma_cache_maint_contiguous(struct page *page, unsigned long offset,
-                      size_t size, void (*op)(const void *, const void *))
-{
-       void *vaddr;
-
-       if (!PageHighMem(page)) {
-               vaddr = page_address(page) + offset;
-               op(vaddr, vaddr + size);
-       } else {
-               vaddr = kmap_high_get(page);
-               if (vaddr) {
-                       vaddr += offset;
-                       op(vaddr, vaddr + size);
-                       kunmap_high(page);
-               }
-       }
-}
-
 static void dma_cache_maint_page(struct page *page, unsigned long offset,
        size_t size, void (*op)(const void *, const void *))
 {
@@ -476,14 +458,26 @@ static void dma_cache_maint_page(struct page *page, unsigned long offset,
        size_t left = size;
        do {
                size_t len = left;
-               if (PageHighMem(page) && len + offset > PAGE_SIZE) {
-                       if (offset >= PAGE_SIZE) {
-                               page += offset / PAGE_SIZE;
-                               offset %= PAGE_SIZE;
+               void *vaddr;
+
+               if (PageHighMem(page)) {
+                       if (len + offset > PAGE_SIZE) {
+                               if (offset >= PAGE_SIZE) {
+                                       page += offset / PAGE_SIZE;
+                                       offset %= PAGE_SIZE;
+                               }
+                               len = PAGE_SIZE - offset;
+                       }
+                       vaddr = kmap_high_get(page);
+                       if (vaddr) {
+                               vaddr += offset;
+                               op(vaddr, vaddr + len);
+                               kunmap_high(page);
                        }
-                       len = PAGE_SIZE - offset;
+               } else {
+                       vaddr = page_address(page) + offset;
+                       op(vaddr, vaddr + len);
                }
-               dma_cache_maint_contiguous(page, offset, len, op);
                offset = 0;
                page++;
                left -= len;