diff options
| -rw-r--r-- | arch/arm/mm/flush.c | 11 |
1 files changed, 8 insertions, 3 deletions
diff --git a/arch/arm/mm/flush.c b/arch/arm/mm/flush.c index 82f4b06bf6b4..302d66517488 100644 --- a/arch/arm/mm/flush.c +++ b/arch/arm/mm/flush.c | |||
| @@ -35,7 +35,6 @@ static void flush_pfn_alias(unsigned long pfn, unsigned long vaddr) | |||
| 35 | : | 35 | : |
| 36 | : "r" (to), "r" (to + PAGE_SIZE - L1_CACHE_BYTES), "r" (zero) | 36 | : "r" (to), "r" (to + PAGE_SIZE - L1_CACHE_BYTES), "r" (zero) |
| 37 | : "cc"); | 37 | : "cc"); |
| 38 | __flush_icache_all(); | ||
| 39 | } | 38 | } |
| 40 | 39 | ||
| 41 | void flush_cache_mm(struct mm_struct *mm) | 40 | void flush_cache_mm(struct mm_struct *mm) |
| @@ -79,8 +78,10 @@ void flush_cache_page(struct vm_area_struct *vma, unsigned long user_addr, unsig | |||
| 79 | return; | 78 | return; |
| 80 | } | 79 | } |
| 81 | 80 | ||
| 82 | if (cache_is_vipt_aliasing()) | 81 | if (cache_is_vipt_aliasing()) { |
| 83 | flush_pfn_alias(pfn, user_addr); | 82 | flush_pfn_alias(pfn, user_addr); |
| 83 | __flush_icache_all(); | ||
| 84 | } | ||
| 84 | } | 85 | } |
| 85 | 86 | ||
| 86 | void flush_ptrace_access(struct vm_area_struct *vma, struct page *page, | 87 | void flush_ptrace_access(struct vm_area_struct *vma, struct page *page, |
| @@ -94,6 +95,7 @@ void flush_ptrace_access(struct vm_area_struct *vma, struct page *page, | |||
| 94 | 95 | ||
| 95 | if (cache_is_vipt_aliasing()) { | 96 | if (cache_is_vipt_aliasing()) { |
| 96 | flush_pfn_alias(page_to_pfn(page), uaddr); | 97 | flush_pfn_alias(page_to_pfn(page), uaddr); |
| 98 | __flush_icache_all(); | ||
| 97 | return; | 99 | return; |
| 98 | } | 100 | } |
| 99 | 101 | ||
| @@ -132,9 +134,11 @@ void __flush_dcache_page(struct address_space *mapping, struct page *page) | |||
| 132 | * we only need to do one flush - which would be at the relevant | 134 | * we only need to do one flush - which would be at the relevant |
| 133 | * userspace colour, which is congruent with page->index. | 135 | * userspace colour, which is congruent with page->index. |
| 134 | */ | 136 | */ |
| 135 | if (mapping && cache_is_vipt_aliasing()) | 137 | if (mapping && cache_is_vipt_aliasing()) { |
| 136 | flush_pfn_alias(page_to_pfn(page), | 138 | flush_pfn_alias(page_to_pfn(page), |
| 137 | page->index << PAGE_CACHE_SHIFT); | 139 | page->index << PAGE_CACHE_SHIFT); |
| 140 | __flush_icache_all(); | ||
| 141 | } | ||
| 138 | } | 142 | } |
| 139 | 143 | ||
| 140 | static void __flush_dcache_aliases(struct address_space *mapping, struct page *page) | 144 | static void __flush_dcache_aliases(struct address_space *mapping, struct page *page) |
| @@ -244,6 +248,7 @@ void __flush_anon_page(struct vm_area_struct *vma, struct page *page, unsigned l | |||
| 244 | * userspace address only. | 248 | * userspace address only. |
| 245 | */ | 249 | */ |
| 246 | flush_pfn_alias(pfn, vmaddr); | 250 | flush_pfn_alias(pfn, vmaddr); |
| 251 | __flush_icache_all(); | ||
| 247 | } | 252 | } |
| 248 | 253 | ||
| 249 | /* | 254 | /* |
