aboutsummaryrefslogtreecommitdiff
path: root/arch
diff options
context:
space:
mode:
authorRussell King <rmk+kernel@arm.linux.org.uk>2009-11-24 14:41:01 +0000
committerRussell King <rmk+kernel@arm.linux.org.uk>2010-02-15 15:22:16 +0000
commit93f1d629e22b08642eb713ad96ac2cb9ade0641c (patch)
treeae7738fd783efd7c71e5669cc84f80d1ff521796 /arch
parent65af191a0414d0e1145f67c153e1b63d122dfbb4 (diff)
ARM: dma-mapping: simplify dma_cache_maint_page
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>
Diffstat (limited to 'arch')
-rw-r--r--arch/arm/mm/dma-mapping.c42
1 files changed, 18 insertions, 24 deletions
diff --git a/arch/arm/mm/dma-mapping.c b/arch/arm/mm/dma-mapping.c
index 77dc483e64c..0d68d2c83cd 100644
--- a/arch/arm/mm/dma-mapping.c
+++ b/arch/arm/mm/dma-mapping.c
@@ -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;