aboutsummaryrefslogtreecommitdiffstats
path: root/arch/arm/mm/flush.c
diff options
context:
space:
mode:
authorRussell King <rmk+kernel@arm.linux.org.uk>2009-10-24 17:58:40 -0400
committerRussell King <rmk+kernel@arm.linux.org.uk>2009-12-04 09:58:50 -0500
commit2df341edf6b8a2db7f414d00faeadccbdd9844ab (patch)
treee88bb4f549103a9fe25552ab136c9ce3daab61f1 /arch/arm/mm/flush.c
parent7b0a1003e780193e2a11c27f5059c26b65f60679 (diff)
ARM: Move __flush_icache_all() out of flush_pfn_alias()
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.c11
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
41void flush_cache_mm(struct mm_struct *mm) 40void 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
86void flush_ptrace_access(struct vm_area_struct *vma, struct page *page, 87void 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
140static void __flush_dcache_aliases(struct address_space *mapping, struct page *page) 144static 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 /*