diff options
author | Vineet Gupta <vgupta@synopsys.com> | 2013-05-16 08:53:31 +0200 |
---|---|---|
committer | Vineet Gupta <vgupta@synopsys.com> | 2013-06-22 15:53:18 +0200 |
commit | 5971bc719d1e329401412ae03ab83c2e4768cd2e (patch) | |
tree | 43f23b617cc6551f1153b876ff07060ab7b54885 /arch/arc/mm | |
parent | ARC: [mm] Zero page optimization (diff) | |
download | linux-5971bc719d1e329401412ae03ab83c2e4768cd2e.tar.xz linux-5971bc719d1e329401412ae03ab83c2e4768cd2e.zip |
ARC: [mm] optimise VIPT dcache aliasing 1/x
flush_cache_page() - kills icache only if page is executable
Signed-off-by: Vineet Gupta <vgupta@synopsys.com>
Diffstat (limited to 'arch/arc/mm')
-rw-r--r-- | arch/arc/mm/cache_arc700.c | 7 |
1 files changed, 6 insertions, 1 deletions
diff --git a/arch/arc/mm/cache_arc700.c b/arch/arc/mm/cache_arc700.c index 03012a27d590..4e54ef5b4c2a 100644 --- a/arch/arc/mm/cache_arc700.c +++ b/arch/arc/mm/cache_arc700.c @@ -679,7 +679,12 @@ void flush_cache_page(struct vm_area_struct *vma, unsigned long u_vaddr, { unsigned int paddr = pfn << PAGE_SHIFT; - __sync_icache_dcache(paddr, u_vaddr, PAGE_SIZE); + u_vaddr &= PAGE_MASK; + + ___flush_dcache_page(paddr, u_vaddr); + + if (vma->vm_flags & VM_EXEC) + __inv_icache_page(paddr, u_vaddr); } void flush_cache_range(struct vm_area_struct *vma, unsigned long start, |