diff options
| author | Paul Mundt <lethal@linux-sh.org> | 2007-11-05 02:18:16 -0500 |
|---|---|---|
| committer | Paul Mundt <lethal@linux-sh.org> | 2007-11-06 21:14:12 -0500 |
| commit | ba1789efea81acc6633f427bfeb871fd608965b5 (patch) | |
| tree | a93f739cc4d36ebf762ce38a8f90b2ffceecb0b9 /include | |
| parent | 7747b9a493a197cb4db44c98d25ce6d3d9f586d1 (diff) | |
sh: Optimized copy_{to,from}_user_page() for SH-4.
This moves copy_{to,from}_user_page() out-of-line on SH-4 and
converts for the kmap_coherent() API. Based on the MIPS
implementation.
Signed-off-by: Paul Mundt <lethal@linux-sh.org>
Diffstat (limited to 'include')
| -rw-r--r-- | include/asm-sh/cacheflush.h | 18 |
1 files changed, 14 insertions, 4 deletions
diff --git a/include/asm-sh/cacheflush.h b/include/asm-sh/cacheflush.h index aa558da08471..b91246153b7e 100644 --- a/include/asm-sh/cacheflush.h +++ b/include/asm-sh/cacheflush.h | |||
| @@ -43,21 +43,31 @@ extern void __flush_purge_region(void *start, int size); | |||
| 43 | extern void __flush_invalidate_region(void *start, int size); | 43 | extern void __flush_invalidate_region(void *start, int size); |
| 44 | #endif | 44 | #endif |
| 45 | 45 | ||
| 46 | #define flush_cache_vmap(start, end) flush_cache_all() | 46 | #ifdef CONFIG_CPU_SH4 |
| 47 | #define flush_cache_vunmap(start, end) flush_cache_all() | 47 | extern void copy_to_user_page(struct vm_area_struct *vma, |
| 48 | struct page *page, unsigned long vaddr, void *dst, const void *src, | ||
| 49 | unsigned long len); | ||
| 48 | 50 | ||
| 49 | #define copy_to_user_page(vma, page, vaddr, dst, src, len) \ | 51 | extern void copy_from_user_page(struct vm_area_struct *vma, |
| 52 | struct page *page, unsigned long vaddr, void *dst, const void *src, | ||
| 53 | unsigned long len); | ||
| 54 | #else | ||
| 55 | #define copy_to_user_page(vma, page, vaddr, dst, src, len) \ | ||
| 50 | do { \ | 56 | do { \ |
| 51 | flush_cache_page(vma, vaddr, page_to_pfn(page));\ | 57 | flush_cache_page(vma, vaddr, page_to_pfn(page));\ |
| 52 | memcpy(dst, src, len); \ | 58 | memcpy(dst, src, len); \ |
| 53 | flush_icache_user_range(vma, page, vaddr, len); \ | 59 | flush_icache_user_range(vma, page, vaddr, len); \ |
| 54 | } while (0) | 60 | } while (0) |
| 55 | 61 | ||
| 56 | #define copy_from_user_page(vma, page, vaddr, dst, src, len) \ | 62 | #define copy_from_user_page(vma, page, vaddr, dst, src, len) \ |
| 57 | do { \ | 63 | do { \ |
| 58 | flush_cache_page(vma, vaddr, page_to_pfn(page));\ | 64 | flush_cache_page(vma, vaddr, page_to_pfn(page));\ |
| 59 | memcpy(dst, src, len); \ | 65 | memcpy(dst, src, len); \ |
| 60 | } while (0) | 66 | } while (0) |
| 67 | #endif | ||
| 68 | |||
| 69 | #define flush_cache_vmap(start, end) flush_cache_all() | ||
| 70 | #define flush_cache_vunmap(start, end) flush_cache_all() | ||
| 61 | 71 | ||
| 62 | #define HAVE_ARCH_UNMAPPED_AREA | 72 | #define HAVE_ARCH_UNMAPPED_AREA |
| 63 | 73 | ||
