diff options
Diffstat (limited to 'arch/arm/mm/fault-armv.c')
-rw-r--r-- | arch/arm/mm/fault-armv.c | 8 |
1 files changed, 4 insertions, 4 deletions
diff --git a/arch/arm/mm/fault-armv.c b/arch/arm/mm/fault-armv.c index 9b906dec1ca1..8440d952ba6d 100644 --- a/arch/arm/mm/fault-armv.c +++ b/arch/arm/mm/fault-armv.c | |||
@@ -28,6 +28,7 @@ | |||
28 | 28 | ||
29 | static unsigned long shared_pte_mask = L_PTE_MT_BUFFERABLE; | 29 | static unsigned long shared_pte_mask = L_PTE_MT_BUFFERABLE; |
30 | 30 | ||
31 | #if __LINUX_ARM_ARCH__ < 6 | ||
31 | /* | 32 | /* |
32 | * We take the easy way out of this problem - we make the | 33 | * We take the easy way out of this problem - we make the |
33 | * PTE uncacheable. However, we leave the write buffer on. | 34 | * PTE uncacheable. However, we leave the write buffer on. |
@@ -141,7 +142,7 @@ make_coherent(struct address_space *mapping, struct vm_area_struct *vma, | |||
141 | * a page table, or changing an existing PTE. Basically, there are two | 142 | * a page table, or changing an existing PTE. Basically, there are two |
142 | * things that we need to take care of: | 143 | * things that we need to take care of: |
143 | * | 144 | * |
144 | * 1. If PG_dcache_dirty is set for the page, we need to ensure | 145 | * 1. If PG_dcache_clean is not set for the page, we need to ensure |
145 | * that any cache entries for the kernels virtual memory | 146 | * that any cache entries for the kernels virtual memory |
146 | * range are written back to the page. | 147 | * range are written back to the page. |
147 | * 2. If we have multiple shared mappings of the same space in | 148 | * 2. If we have multiple shared mappings of the same space in |
@@ -168,10 +169,8 @@ void update_mmu_cache(struct vm_area_struct *vma, unsigned long addr, | |||
168 | return; | 169 | return; |
169 | 170 | ||
170 | mapping = page_mapping(page); | 171 | mapping = page_mapping(page); |
171 | #ifndef CONFIG_SMP | 172 | if (!test_and_set_bit(PG_dcache_clean, &page->flags)) |
172 | if (test_and_clear_bit(PG_dcache_dirty, &page->flags)) | ||
173 | __flush_dcache_page(mapping, page); | 173 | __flush_dcache_page(mapping, page); |
174 | #endif | ||
175 | if (mapping) { | 174 | if (mapping) { |
176 | if (cache_is_vivt()) | 175 | if (cache_is_vivt()) |
177 | make_coherent(mapping, vma, addr, ptep, pfn); | 176 | make_coherent(mapping, vma, addr, ptep, pfn); |
@@ -179,6 +178,7 @@ void update_mmu_cache(struct vm_area_struct *vma, unsigned long addr, | |||
179 | __flush_icache_all(); | 178 | __flush_icache_all(); |
180 | } | 179 | } |
181 | } | 180 | } |
181 | #endif /* __LINUX_ARM_ARCH__ < 6 */ | ||
182 | 182 | ||
183 | /* | 183 | /* |
184 | * Check whether the write buffer has physical address aliasing | 184 | * Check whether the write buffer has physical address aliasing |