瀏覽代碼

ARC: [mm] serious bug in vaddr based icache flush

vaddr used to index the cache was clipped from the wrong end, and thus
would potentially fail to flush the correct lines.

The problem was dorment for so long because up until the recent
optimizations it was only used for ptrace break-point only flushes.

Signed-off-by: Vineet Gupta <vgupta@synopsys.com>
Vineet Gupta 12 年之前
父節點
當前提交
c917a36f5f
共有 1 個文件被更改,包括 1 次插入1 次删除
  1. 1 1
      arch/arc/mm/cache_arc700.c

+ 1 - 1
arch/arc/mm/cache_arc700.c

@@ -421,7 +421,7 @@ static void __ic_line_inv_vaddr(unsigned long phy_start, unsigned long vaddr,
 	num_lines = DIV_ROUND_UP(sz, ARC_ICACHE_LINE_LEN);
 	num_lines = DIV_ROUND_UP(sz, ARC_ICACHE_LINE_LEN);
 
 
 #if (CONFIG_ARC_MMU_VER > 2)
 #if (CONFIG_ARC_MMU_VER > 2)
-	vaddr &= ~ICACHE_LINE_MASK;
+	vaddr &= ICACHE_LINE_MASK;
 	addr = phy_start;
 	addr = phy_start;
 #else
 #else
 	/* bits 17:13 of vaddr go as bits 4:0 of paddr */
 	/* bits 17:13 of vaddr go as bits 4:0 of paddr */