1234567891011121314151617181920212223242526272829303132333435363738 |
- #ifndef _ASM_S390_JUMP_LABEL_H
- #define _ASM_S390_JUMP_LABEL_H
- #include <linux/types.h>
- #define JUMP_LABEL_NOP_SIZE 6
- #ifdef CONFIG_64BIT
- #define ASM_PTR ".quad"
- #define ASM_ALIGN ".balign 8"
- #else
- #define ASM_PTR ".long"
- #define ASM_ALIGN ".balign 4"
- #endif
- static __always_inline bool arch_static_branch(struct static_key *key)
- {
- asm_volatile_goto("0: brcl 0,0\n"
- ".pushsection __jump_table, \"aw\"\n"
- ASM_ALIGN "\n"
- ASM_PTR " 0b, %l[label], %0\n"
- ".popsection\n"
- : : "X" (key) : : label);
- return false;
- label:
- return true;
- }
- typedef unsigned long jump_label_t;
- struct jump_entry {
- jump_label_t code;
- jump_label_t target;
- jump_label_t key;
- };
- #endif
|