diff options
author | Russell King <rmk@dyn-67.arm.linux.org.uk> | 2005-11-30 11:02:54 -0500 |
---|---|---|
committer | Russell King <rmk+kernel@arm.linux.org.uk> | 2005-11-30 11:02:54 -0500 |
commit | df2f5e721ed36e21da27e1f415c71ba0e20f31b5 (patch) | |
tree | 1c2df43e11a802a5316d1523bb73e6bd7d152c5a /arch | |
parent | d2ef5ebb4c4fe141a82252d4db8d8521e6765c5a (diff) |
[ARM SMP] Disable lazy flush_dcache_page for SMP
Lazy flush_dcache_page() causes userspace instability on SMP
platforms, so disable it for now.
Signed-off-by: Russell King <rmk+kernel@arm.linux.org.uk>
Diffstat (limited to 'arch')
-rw-r--r-- | arch/arm/mm/flush.c | 7 |
1 files changed, 6 insertions, 1 deletions
diff --git a/arch/arm/mm/flush.c b/arch/arm/mm/flush.c index c9a03981b785..330695b6b19d 100644 --- a/arch/arm/mm/flush.c +++ b/arch/arm/mm/flush.c | |||
@@ -155,14 +155,19 @@ static void __flush_dcache_aliases(struct address_space *mapping, struct page *p | |||
155 | * space mappings, we can be lazy and remember that we may have dirty | 155 | * space mappings, we can be lazy and remember that we may have dirty |
156 | * kernel cache lines for later. Otherwise, we assume we have | 156 | * kernel cache lines for later. Otherwise, we assume we have |
157 | * aliasing mappings. | 157 | * aliasing mappings. |
158 | * | ||
159 | * Note that we disable the lazy flush for SMP. | ||
158 | */ | 160 | */ |
159 | void flush_dcache_page(struct page *page) | 161 | void flush_dcache_page(struct page *page) |
160 | { | 162 | { |
161 | struct address_space *mapping = page_mapping(page); | 163 | struct address_space *mapping = page_mapping(page); |
162 | 164 | ||
165 | #ifndef CONFIG_SMP | ||
163 | if (mapping && !mapping_mapped(mapping)) | 166 | if (mapping && !mapping_mapped(mapping)) |
164 | set_bit(PG_dcache_dirty, &page->flags); | 167 | set_bit(PG_dcache_dirty, &page->flags); |
165 | else { | 168 | else |
169 | #endif | ||
170 | { | ||
166 | __flush_dcache_page(mapping, page); | 171 | __flush_dcache_page(mapping, page); |
167 | if (mapping && cache_is_vivt()) | 172 | if (mapping && cache_is_vivt()) |
168 | __flush_dcache_aliases(mapping, page); | 173 | __flush_dcache_aliases(mapping, page); |