MIPS: Allow R2 CPUs to turn off generation of 'ehb' instructions.
authorDavid Daney <ddaney@caviumnetworks.com>
Tue, 12 May 2009 19:41:53 +0000 (12:41 -0700)
committerRalf Baechle <ralf@linux-mips.org>
Wed, 17 Jun 2009 10:06:26 +0000 (11:06 +0100)
Some CPUs do not need ehb instructions after writing CP0 registers.
By allowing ehb generation to be overridden in
cpu-feature-overrides.h, we can save a few instructions in the TLB
handler hot paths.

Signed-off-by: David Daney <ddaney@caviumnetworks.com>
Signed-off-by: Ralf Baechle <ralf@linux-mips.org>
arch/mips/include/asm/cpu-features.h
arch/mips/mm/tlbex.c

index c0047f861337f9cee157b73bd9fd36ea9259a517..1cba4b2ffd1e5747132576a80563e2d2656f9069 100644 (file)
 #define cpu_has_mips_r (cpu_has_mips32r1 | cpu_has_mips32r2 | \
                         cpu_has_mips64r1 | cpu_has_mips64r2)
 
+#ifndef cpu_has_mips_r2_exec_hazard
+#define cpu_has_mips_r2_exec_hazard cpu_has_mips_r2
+#endif
+
 /*
  * MIPS32, MIPS64, VR5500, IDT32332, IDT32334 and maybe a few other
  * pre-MIPS32/MIPS53 processors have CLO, CLZ.  For 64-bit kernels
index d9a18b2b7f829e7689fed7169d5d7c02094a61b2..0e34faaadb5c6faec670daf7aea3ea88926b6bc2 100644 (file)
@@ -259,7 +259,8 @@ static void __cpuinit build_tlb_write_entry(u32 **p, struct uasm_label **l,
        }
 
        if (cpu_has_mips_r2) {
-               uasm_i_ehb(p);
+               if (cpu_has_mips_r2_exec_hazard)
+                       uasm_i_ehb(p);
                tlbw(p);
                return;
        }