浏览代码

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>
Vineet Gupta 12 年之前
父节点
当前提交
5971bc719d
共有 1 个文件被更改,包括 6 次插入1 次删除
  1. 6 1
      arch/arc/mm/cache_arc700.c

+ 6 - 1
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;
 	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,
 void flush_cache_range(struct vm_area_struct *vma, unsigned long start,