diff options
author | Maciej W. Rozycki <macro@codesourcery.com> | 2014-11-17 16:10:32 +0000 |
---|---|---|
committer | Ralf Baechle <ralf@linux-mips.org> | 2014-11-19 18:22:09 +0100 |
commit | 935c2dbec4d6d3163ee8e7409996904a734ad89a (patch) | |
tree | e786a6f69c5c5f2f03ac85e5466906a6524fec18 /arch/mips/include/asm/jump_label.h | |
parent | 99436f7d69045800ffd1d66912f85d37150c7e2b (diff) | |
download | lwn-935c2dbec4d6d3163ee8e7409996904a734ad89a.tar.gz lwn-935c2dbec4d6d3163ee8e7409996904a734ad89a.zip |
MIPS: jump_label.c: Handle the microMIPS J instruction encoding
Implement the microMIPS encoding of the J instruction for the purpose of
the static keys feature, fixing a crash early on in bootstrap as the
kernel is unhappy seeing the ISA bit set in jump table entries. Make
sure the ISA bit correctly reflects the instruction encoding chosen for
the kernel, 0 for the standard MIPS and 1 for the microMIPS encoding.
Also make sure the instruction to patch is a 32-bit NOP in the microMIPS
mode as by default the 16-bit short encoding is assumed
Signed-off-by: Maciej W. Rozycki <macro@codesourcery.com>
Cc: linux-mips@linux-mips.org
Patchwork: https://patchwork.linux-mips.org/patch/8516/
Signed-off-by: Ralf Baechle <ralf@linux-mips.org>
Diffstat (limited to 'arch/mips/include/asm/jump_label.h')
-rw-r--r-- | arch/mips/include/asm/jump_label.h | 8 |
1 files changed, 7 insertions, 1 deletions
diff --git a/arch/mips/include/asm/jump_label.h b/arch/mips/include/asm/jump_label.h index e194f957ca8c..fdbff44e5482 100644 --- a/arch/mips/include/asm/jump_label.h +++ b/arch/mips/include/asm/jump_label.h @@ -20,9 +20,15 @@ #define WORD_INSN ".word" #endif +#ifdef CONFIG_CPU_MICROMIPS +#define NOP_INSN "nop32" +#else +#define NOP_INSN "nop" +#endif + static __always_inline bool arch_static_branch(struct static_key *key) { - asm_volatile_goto("1:\tnop\n\t" + asm_volatile_goto("1:\t" NOP_INSN "\n\t" "nop\n\t" ".pushsection __jump_table, \"aw\"\n\t" WORD_INSN " 1b, %l[l_yes], %0\n\t" |