|
@@ -81,18 +81,21 @@ struct module;
|
|
|
#include <linux/atomic.h>
|
|
|
#ifdef HAVE_JUMP_LABEL
|
|
|
|
|
|
-#define JUMP_LABEL_TRUE_BRANCH 1UL
|
|
|
+#define JUMP_LABEL_TYPE_FALSE_BRANCH 0UL
|
|
|
+#define JUMP_LABEL_TYPE_TRUE_BRANCH 1UL
|
|
|
+#define JUMP_LABEL_TYPE_MASK 1UL
|
|
|
|
|
|
static
|
|
|
inline struct jump_entry *jump_label_get_entries(struct static_key *key)
|
|
|
{
|
|
|
return (struct jump_entry *)((unsigned long)key->entries
|
|
|
- & ~JUMP_LABEL_TRUE_BRANCH);
|
|
|
+ & ~JUMP_LABEL_TYPE_MASK);
|
|
|
}
|
|
|
|
|
|
static inline bool jump_label_get_branch_default(struct static_key *key)
|
|
|
{
|
|
|
- if ((unsigned long)key->entries & JUMP_LABEL_TRUE_BRANCH)
|
|
|
+ if (((unsigned long)key->entries & JUMP_LABEL_TYPE_MASK) ==
|
|
|
+ JUMP_LABEL_TYPE_TRUE_BRANCH)
|
|
|
return true;
|
|
|
return false;
|
|
|
}
|
|
@@ -122,10 +125,12 @@ extern void static_key_slow_inc(struct static_key *key);
|
|
|
extern void static_key_slow_dec(struct static_key *key);
|
|
|
extern void jump_label_apply_nops(struct module *mod);
|
|
|
|
|
|
-#define STATIC_KEY_INIT_TRUE ((struct static_key) \
|
|
|
- { .enabled = ATOMIC_INIT(1), .entries = (void *)1 })
|
|
|
-#define STATIC_KEY_INIT_FALSE ((struct static_key) \
|
|
|
- { .enabled = ATOMIC_INIT(0), .entries = (void *)0 })
|
|
|
+#define STATIC_KEY_INIT_TRUE ((struct static_key) \
|
|
|
+ { .enabled = ATOMIC_INIT(1), \
|
|
|
+ .entries = (void *)JUMP_LABEL_TYPE_TRUE_BRANCH })
|
|
|
+#define STATIC_KEY_INIT_FALSE ((struct static_key) \
|
|
|
+ { .enabled = ATOMIC_INIT(0), \
|
|
|
+ .entries = (void *)JUMP_LABEL_TYPE_FALSE_BRANCH })
|
|
|
|
|
|
#else /* !HAVE_JUMP_LABEL */
|
|
|
|