jump_label, locking/static_keys: Rename JUMP_LABEL_TYPE_* and related helpers to...
[firefly-linux-kernel-4.4.55.git] / kernel / jump_label.c
index 96d8945c8bf3f61c224ab1c30e637bd3383a3155..85a2a0086c6773b027899031e190d93cb45f0e9a 100644 (file)
@@ -56,6 +56,11 @@ jump_label_sort_entries(struct jump_entry *start, struct jump_entry *stop)
 
 static void jump_label_update(struct static_key *key, int enable);
 
+static inline bool static_key_type(struct static_key *key)
+{
+       return (unsigned long)key->entries & JUMP_TYPE_MASK;
+}
+
 void static_key_slow_inc(struct static_key *key)
 {
        STATIC_KEY_CHECK_USE();
@@ -64,7 +69,7 @@ void static_key_slow_inc(struct static_key *key)
 
        jump_label_lock();
        if (atomic_read(&key->enabled) == 0) {
-               if (!jump_label_get_branch_default(key))
+               if (!static_key_type(key))
                        jump_label_update(key, JUMP_LABEL_JMP);
                else
                        jump_label_update(key, JUMP_LABEL_NOP);
@@ -87,7 +92,7 @@ static void __static_key_slow_dec(struct static_key *key,
                atomic_inc(&key->enabled);
                schedule_delayed_work(work, rate_limit);
        } else {
-               if (!jump_label_get_branch_default(key))
+               if (!static_key_type(key))
                        jump_label_update(key, JUMP_LABEL_NOP);
                else
                        jump_label_update(key, JUMP_LABEL_JMP);
@@ -178,15 +183,17 @@ static void __jump_label_update(struct static_key *key,
        }
 }
 
-static enum jump_label_type jump_label_type(struct static_key *key)
+static inline struct jump_entry *static_key_entries(struct static_key *key)
 {
-       bool true_branch = jump_label_get_branch_default(key);
-       bool state = static_key_enabled(key);
+       return (struct jump_entry *)((unsigned long)key->entries & ~JUMP_TYPE_MASK);
+}
 
-       if ((!true_branch && state) || (true_branch && !state))
-               return JUMP_LABEL_JMP;
+static enum jump_label_type jump_label_type(struct static_key *key)
+{
+       bool enabled = static_key_enabled(key);
+       bool type = static_key_type(key);
 
-       return JUMP_LABEL_NOP;
+       return enabled ^ type;
 }
 
 void __init jump_label_init(void)
@@ -442,7 +449,7 @@ int jump_label_text_reserved(void *start, void *end)
 static void jump_label_update(struct static_key *key, int enable)
 {
        struct jump_entry *stop = __stop___jump_table;
-       struct jump_entry *entry = jump_label_get_entries(key);
+       struct jump_entry *entry = static_key_entries(key);
 #ifdef CONFIG_MODULES
        struct module *mod;