aboutsummaryrefslogtreecommitdiffstats
path: root/arch/arm/mm/flush.c
diff options
context:
space:
mode:
authorCatalin Marinas <catalin.marinas@arm.com>2010-09-13 10:57:36 -0400
committerRussell King <rmk+kernel@arm.linux.org.uk>2010-09-19 07:17:43 -0400
commitc01778001a4f5ad9c62d882776235f3f31922fdd (patch)
treea425979b236dd5c7757e9a1f0c66d3819ad99021 /arch/arm/mm/flush.c
parent0fc73099dd25df2c5181b7bad57d1faa5cd12d3c (diff)
ARM: 6379/1: Assume new page cache pages have dirty D-cache
There are places in Linux where writes to newly allocated page cache pages happen without a subsequent call to flush_dcache_page() (several PIO drivers including USB HCD). This patch changes the meaning of PG_arch_1 to be PG_dcache_clean and always flush the D-cache for a newly mapped page in update_mmu_cache(). The patch also sets the PG_arch_1 bit in the DMA cache maintenance function to avoid additional cache flushing in update_mmu_cache(). Tested-by: Rabin Vincent <rabin.vincent@stericsson.com> Cc: Nicolas Pitre <nicolas.pitre@linaro.org> Signed-off-by: Catalin Marinas <catalin.marinas@arm.com> Signed-off-by: Russell King <rmk+kernel@arm.linux.org.uk>
Diffstat (limited to 'arch/arm/mm/flush.c')
-rw-r--r--arch/arm/mm/flush.c3
1 files changed, 2 insertions, 1 deletions
diff --git a/arch/arm/mm/flush.c b/arch/arm/mm/flush.c
index 87dd5ffdfa2d..b4efce9b7985 100644
--- a/arch/arm/mm/flush.c
+++ b/arch/arm/mm/flush.c
@@ -248,7 +248,7 @@ void flush_dcache_page(struct page *page)
248 248
249#ifndef CONFIG_SMP 249#ifndef CONFIG_SMP
250 if (mapping && !mapping_mapped(mapping)) 250 if (mapping && !mapping_mapped(mapping))
251 set_bit(PG_dcache_dirty, &page->flags); 251 clear_bit(PG_dcache_clean, &page->flags);
252 else 252 else
253#endif 253#endif
254 { 254 {
@@ -257,6 +257,7 @@ void flush_dcache_page(struct page *page)
257 __flush_dcache_aliases(mapping, page); 257 __flush_dcache_aliases(mapping, page);
258 else if (mapping) 258 else if (mapping)
259 __flush_icache_all(); 259 __flush_icache_all();
260 set_bit(PG_dcache_clean, &page->flags);
260 } 261 }
261} 262}
262EXPORT_SYMBOL(flush_dcache_page); 263EXPORT_SYMBOL(flush_dcache_page);