diff options
author | Nicolas Pitre <nico@cam.org> | 2009-06-11 22:09:29 -0400 |
---|---|---|
committer | Russell King <rmk+kernel@arm.linux.org.uk> | 2009-06-14 06:20:37 -0400 |
commit | 73be1591579084a8103a7005dd3172f3e9dd7362 (patch) | |
tree | 0f9dc996b9effc48728b2e25f51c41eded8cb518 /arch | |
parent | 44b7532b8b464f606053562400719c9c21276037 (diff) |
[ARM] 5545/2: add flush_kernel_dcache_page() for ARM
Without this, the default implementation is a no op which is completely
wrong with a VIVT cache, and usage of sg_copy_buffer() produces
unpredictable results.
Tested-by: Sebastian Andrzej Siewior <bigeasy@breakpoint.cc>
CC: stable@kernel.org
Signed-off-by: Nicolas Pitre <nico@marvell.com>
Signed-off-by: Russell King <rmk+kernel@arm.linux.org.uk>
Diffstat (limited to 'arch')
-rw-r--r-- | arch/arm/include/asm/cacheflush.h | 8 |
1 files changed, 8 insertions, 0 deletions
diff --git a/arch/arm/include/asm/cacheflush.h b/arch/arm/include/asm/cacheflush.h index bb7d695f3900..1a711ea8418b 100644 --- a/arch/arm/include/asm/cacheflush.h +++ b/arch/arm/include/asm/cacheflush.h | |||
@@ -429,6 +429,14 @@ static inline void flush_anon_page(struct vm_area_struct *vma, | |||
429 | __flush_anon_page(vma, page, vmaddr); | 429 | __flush_anon_page(vma, page, vmaddr); |
430 | } | 430 | } |
431 | 431 | ||
432 | #define ARCH_HAS_FLUSH_KERNEL_DCACHE_PAGE | ||
433 | static inline void flush_kernel_dcache_page(struct page *page) | ||
434 | { | ||
435 | /* highmem pages are always flushed upon kunmap already */ | ||
436 | if ((cache_is_vivt() || cache_is_vipt_aliasing()) && !PageHighMem(page)) | ||
437 | __cpuc_flush_dcache_page(page_address(page)); | ||
438 | } | ||
439 | |||
432 | #define flush_dcache_mmap_lock(mapping) \ | 440 | #define flush_dcache_mmap_lock(mapping) \ |
433 | spin_lock_irq(&(mapping)->tree_lock) | 441 | spin_lock_irq(&(mapping)->tree_lock) |
434 | #define flush_dcache_mmap_unlock(mapping) \ | 442 | #define flush_dcache_mmap_unlock(mapping) \ |