1#ifndef _ASM_ARM_JUMP_LABEL_H 2#define _ASM_ARM_JUMP_LABEL_H 3 4#ifndef __ASSEMBLY__ 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 16static __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; 26l_yes: 27 return true; 28} 29 30typedef u32 jump_label_t; 31 32struct jump_entry { 33 jump_label_t code; 34 jump_label_t target; 35 jump_label_t key; 36}; 37 38#endif /* __ASSEMBLY__ */ 39#endif 40