MIPS: c-r4k: Avoid dcache flush for sigtramps
authorJames Hogan <james.hogan@imgtec.com>
Wed, 13 Jul 2016 13:12:49 +0000 (14:12 +0100)
committerRalf Baechle <ralf@linux-mips.org>
Fri, 29 Jul 2016 08:19:29 +0000 (10:19 +0200)
Avoid the dcache and scache flush in local_r4k_flush_cache_sigtramp() if
the icache fills straight from the dcache.

Signed-off-by: James Hogan <james.hogan@imgtec.com>
Cc: Paul Burton <paul.burton@imgtec.com>
Cc: Leonid Yegoshin <Leonid.Yegoshin@imgtec.com>
Cc: linux-mips@linux-mips.org
Patchwork: https://patchwork.linux-mips.org/patch/13802/
Signed-off-by: Ralf Baechle <ralf@linux-mips.org>
arch/mips/mm/c-r4k.c

index 600b0ad483192aad039f686205d728f439d6b7b4..58b810e67bbae1101b294659906e9adf8ca4c889 100644 (file)
@@ -841,12 +841,16 @@ static void local_r4k_flush_cache_sigtramp(void *args)
        }
 
        R4600_HIT_CACHEOP_WAR_IMPL;
-       if (dc_lsize)
-               vaddr ? flush_dcache_line(addr & ~(dc_lsize - 1))
-                     : protected_writeback_dcache_line(addr & ~(dc_lsize - 1));
-       if (!cpu_icache_snoops_remote_store && scache_size)
-               vaddr ? flush_scache_line(addr & ~(sc_lsize - 1))
-                     : protected_writeback_scache_line(addr & ~(sc_lsize - 1));
+       if (!cpu_has_ic_fills_f_dc) {
+               if (dc_lsize)
+                       vaddr ? flush_dcache_line(addr & ~(dc_lsize - 1))
+                             : protected_writeback_dcache_line(
+                                                       addr & ~(dc_lsize - 1));
+               if (!cpu_icache_snoops_remote_store && scache_size)
+                       vaddr ? flush_scache_line(addr & ~(sc_lsize - 1))
+                             : protected_writeback_scache_line(
+                                                       addr & ~(sc_lsize - 1));
+       }
        if (ic_lsize)
                vaddr ? flush_icache_line(addr & ~(ic_lsize - 1))
                      : protected_flush_icache_line(addr & ~(ic_lsize - 1));