aboutsummaryrefslogtreecommitdiffstats
path: root/arch/sh/mm/cache-sh4.c
diff options
context:
space:
mode:
Diffstat (limited to 'arch/sh/mm/cache-sh4.c')
-rw-r--r--arch/sh/mm/cache-sh4.c12
1 files changed, 11 insertions, 1 deletions
diff --git a/arch/sh/mm/cache-sh4.c b/arch/sh/mm/cache-sh4.c
index c6955157c989..72bb48773337 100644
--- a/arch/sh/mm/cache-sh4.c
+++ b/arch/sh/mm/cache-sh4.c
@@ -236,10 +236,20 @@ static inline void flush_cache_4096(unsigned long start,
236/* 236/*
237 * Write back & invalidate the D-cache of the page. 237 * Write back & invalidate the D-cache of the page.
238 * (To avoid "alias" issues) 238 * (To avoid "alias" issues)
239 *
240 * This uses a lazy write-back on UP, which is explicitly
241 * disabled on SMP.
239 */ 242 */
240void flush_dcache_page(struct page *page) 243void flush_dcache_page(struct page *page)
241{ 244{
242 if (test_bit(PG_mapped, &page->flags)) { 245#ifndef CONFIG_SMP
246 struct address_space *mapping = page_mapping(page);
247
248 if (mapping && !mapping_mapped(mapping))
249 set_bit(PG_dcache_dirty, &page->flags);
250 else
251#endif
252 {
243 unsigned long phys = PHYSADDR(page_address(page)); 253 unsigned long phys = PHYSADDR(page_address(page));
244 unsigned long addr = CACHE_OC_ADDRESS_ARRAY; 254 unsigned long addr = CACHE_OC_ADDRESS_ARRAY;
245 int i, n; 255 int i, n;