diff options
Diffstat (limited to 'arch/sh/mm/cache-sh4.c')
-rw-r--r-- | arch/sh/mm/cache-sh4.c | 12 |
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 | */ |
240 | void flush_dcache_page(struct page *page) | 243 | void 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; |