diff options
Diffstat (limited to 'include/linux/jump_label.h')
-rw-r--r-- | include/linux/jump_label.h | 58 |
1 files changed, 58 insertions, 0 deletions
diff --git a/include/linux/jump_label.h b/include/linux/jump_label.h new file mode 100644 index 000000000000..de58656d28e0 --- /dev/null +++ b/include/linux/jump_label.h | |||
@@ -0,0 +1,58 @@ | |||
1 | #ifndef _LINUX_JUMP_LABEL_H | ||
2 | #define _LINUX_JUMP_LABEL_H | ||
3 | |||
4 | #if defined(CC_HAVE_ASM_GOTO) && defined(CONFIG_HAVE_ARCH_JUMP_LABEL) | ||
5 | # include <asm/jump_label.h> | ||
6 | # define HAVE_JUMP_LABEL | ||
7 | #endif | ||
8 | |||
9 | enum jump_label_type { | ||
10 | JUMP_LABEL_ENABLE, | ||
11 | JUMP_LABEL_DISABLE | ||
12 | }; | ||
13 | |||
14 | struct module; | ||
15 | |||
16 | #ifdef HAVE_JUMP_LABEL | ||
17 | |||
18 | extern struct jump_entry __start___jump_table[]; | ||
19 | extern struct jump_entry __stop___jump_table[]; | ||
20 | |||
21 | extern void arch_jump_label_transform(struct jump_entry *entry, | ||
22 | enum jump_label_type type); | ||
23 | extern void jump_label_update(unsigned long key, enum jump_label_type type); | ||
24 | extern void jump_label_apply_nops(struct module *mod); | ||
25 | extern void arch_jump_label_text_poke_early(jump_label_t addr); | ||
26 | |||
27 | #define enable_jump_label(key) \ | ||
28 | jump_label_update((unsigned long)key, JUMP_LABEL_ENABLE); | ||
29 | |||
30 | #define disable_jump_label(key) \ | ||
31 | jump_label_update((unsigned long)key, JUMP_LABEL_DISABLE); | ||
32 | |||
33 | #else | ||
34 | |||
35 | #define JUMP_LABEL(key, label) \ | ||
36 | do { \ | ||
37 | if (unlikely(*key)) \ | ||
38 | goto label; \ | ||
39 | } while (0) | ||
40 | |||
41 | #define enable_jump_label(cond_var) \ | ||
42 | do { \ | ||
43 | *(cond_var) = 1; \ | ||
44 | } while (0) | ||
45 | |||
46 | #define disable_jump_label(cond_var) \ | ||
47 | do { \ | ||
48 | *(cond_var) = 0; \ | ||
49 | } while (0) | ||
50 | |||
51 | static inline int jump_label_apply_nops(struct module *mod) | ||
52 | { | ||
53 | return 0; | ||
54 | } | ||
55 | |||
56 | #endif | ||
57 | |||
58 | #endif | ||