diff options
author | Catalin Marinas <catalin.marinas@arm.com> | 2010-09-13 10:57:36 -0400 |
---|---|---|
committer | Russell King <rmk+kernel@arm.linux.org.uk> | 2010-09-19 07:17:43 -0400 |
commit | c01778001a4f5ad9c62d882776235f3f31922fdd (patch) | |
tree | a425979b236dd5c7757e9a1f0c66d3819ad99021 /arch/arm/mm/flush.c | |
parent | 0fc73099dd25df2c5181b7bad57d1faa5cd12d3c (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.c | 3 |
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 | } |
262 | EXPORT_SYMBOL(flush_dcache_page); | 263 | EXPORT_SYMBOL(flush_dcache_page); |