1 #ifndef _ASM_ARM_JUMP_LABEL_H 2 #define _ASM_ARM_JUMP_LABEL_H 3 4 #ifdef __KERNEL__ 5 6 #include <linux/types.h> 7 8 #define JUMP_LABEL_NOP_SIZE 4 9 10 #ifdef CONFIG_THUMB2_KERNEL 11 #define JUMP_LABEL_NOP "nop.w" 12 #else 13 #define JUMP_LABEL_NOP "nop" 14 #endif 15 16 static __always_inline bool arch_static_branch(struct static_key *key) 17 { 18 asm_volatile_goto("1:\n\t" 19 JUMP_LABEL_NOP "\n\t" 20 ".pushsection __jump_table, \"aw\"\n\t" 21 ".word 1b, %l[l_yes], %c0\n\t" 22 ".popsection\n\t" 23 : : "i" (key) : : l_yes); 24 25 return false; 26 l_yes: 27 return true; 28 } 29 30 #endif /* __KERNEL__ */ 31 32 typedef u32 jump_label_t; 33 34 struct jump_entry { 35 jump_label_t code; 36 jump_label_t target; 37 jump_label_t key; 38 }; 39 40 #endif 41