ARC: [mm] serious bug in vaddr based icache flush
authorVineet Gupta <vgupta@synopsys.com>
Thu, 9 May 2013 08:15:12 +0000 (13:45 +0530)
committerVineet Gupta <vgupta@synopsys.com>
Thu, 9 May 2013 08:15:12 +0000 (13:45 +0530)
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>
arch/arc/mm/cache_arc700.c

index c854cf95f70666669dcff0eec6006bbbe788bab0..d48afebf9df5101a066bd9e819dee39bff4cf4a2 100644 (file)
@@ -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);
 
 #if (CONFIG_ARC_MMU_VER > 2)
-       vaddr &= ~ICACHE_LINE_MASK;
+       vaddr &= ICACHE_LINE_MASK;
        addr = phy_start;
 #else
        /* bits 17:13 of vaddr go as bits 4:0 of paddr */