jump_label: Free jump_entry::key bit1 for build use
authorPeter Zijlstra <peterz@infradead.org>
Thu, 6 May 2021 19:34:00 +0000 (21:34 +0200)
committerIngo Molnar <mingo@kernel.org>
Wed, 12 May 2021 12:54:55 +0000 (14:54 +0200)
Have jump_label_init() set jump_entry::key bit1 to either 0 ot 1
unconditionally. This makes it available for build-time games.

Signed-off-by: Peter Zijlstra (Intel) <peterz@infradead.org>
Signed-off-by: Ingo Molnar <mingo@kernel.org>
Link: https://lore.kernel.org/r/20210506194157.906893264@infradead.org
include/linux/jump_label.h
kernel/jump_label.c

index 8c45f58..48b9b2a 100644 (file)
@@ -171,9 +171,12 @@ static inline bool jump_entry_is_init(const struct jump_entry *entry)
        return (unsigned long)entry->key & 2UL;
 }
 
-static inline void jump_entry_set_init(struct jump_entry *entry)
+static inline void jump_entry_set_init(struct jump_entry *entry, bool set)
 {
-       entry->key |= 2;
+       if (set)
+               entry->key |= 2;
+       else
+               entry->key &= ~2;
 }
 
 static inline int jump_entry_size(struct jump_entry *entry)
index 521cafc..bdb0681 100644 (file)
@@ -483,13 +483,14 @@ void __init jump_label_init(void)
 
        for (iter = iter_start; iter < iter_stop; iter++) {
                struct static_key *iterk;
+               bool in_init;
 
                /* rewrite NOPs */
                if (jump_label_type(iter) == JUMP_LABEL_NOP)
                        arch_jump_label_transform_static(iter, JUMP_LABEL_NOP);
 
-               if (init_section_contains((void *)jump_entry_code(iter), 1))
-                       jump_entry_set_init(iter);
+               in_init = init_section_contains((void *)jump_entry_code(iter), 1);
+               jump_entry_set_init(iter, in_init);
 
                iterk = jump_entry_key(iter);
                if (iterk == key)
@@ -634,9 +635,10 @@ static int jump_label_add_module(struct module *mod)
 
        for (iter = iter_start; iter < iter_stop; iter++) {
                struct static_key *iterk;
+               bool in_init;
 
-               if (within_module_init(jump_entry_code(iter), mod))
-                       jump_entry_set_init(iter);
+               in_init = within_module_init(jump_entry_code(iter), mod);
+               jump_entry_set_init(iter, in_init);
 
                iterk = jump_entry_key(iter);
                if (iterk == key)