diff options
author | Tejun Heo <tj@kernel.org> | 2015-09-18 11:56:28 -0400 |
---|---|---|
committer | Tejun Heo <tj@kernel.org> | 2015-09-18 11:56:28 -0400 |
commit | fa128fd735bd236b6b04d3fedfed7a784137c185 (patch) | |
tree | 34b2364ce6da15daf6a3f03864d2d9a9a2baa7c2 | |
parent | 3014dde762f618fbcfe899f9ce9e929a2e5aa6dd (diff) | |
download | linux-stable-fa128fd735bd236b6b04d3fedfed7a784137c185.tar.gz linux-stable-fa128fd735bd236b6b04d3fedfed7a784137c185.tar.bz2 linux-stable-fa128fd735bd236b6b04d3fedfed7a784137c185.zip |
jump_label: make static_key_enabled() work on static_key_true/false types too
static_key_enabled() can be used on struct static_key but not on its
wrapper types static_key_true and static_key_false. The function is
useful for debugging and management of static keys. Update it so that
it can be used for the wrapper types too.
Signed-off-by: Tejun Heo <tj@kernel.org>
Acked-by: Peter Zijlstra (Intel) <peterz@infradead.org>
Cc: Andrew Morton <akpm@linux-foundation.org>
-rw-r--r-- | include/linux/jump_label.h | 18 |
1 files changed, 11 insertions, 7 deletions
diff --git a/include/linux/jump_label.h b/include/linux/jump_label.h index 7f653e8f6690..c9ca050de846 100644 --- a/include/linux/jump_label.h +++ b/include/linux/jump_label.h @@ -216,11 +216,6 @@ static inline int jump_label_apply_nops(struct module *mod) #define STATIC_KEY_INIT STATIC_KEY_INIT_FALSE #define jump_label_enabled static_key_enabled -static inline bool static_key_enabled(struct static_key *key) -{ - return static_key_count(key) > 0; -} - static inline void static_key_enable(struct static_key *key) { int count = static_key_count(key); @@ -267,6 +262,17 @@ struct static_key_false { #define DEFINE_STATIC_KEY_FALSE(name) \ struct static_key_false name = STATIC_KEY_FALSE_INIT +extern bool ____wrong_branch_error(void); + +#define static_key_enabled(x) \ +({ \ + if (!__builtin_types_compatible_p(typeof(*x), struct static_key) && \ + !__builtin_types_compatible_p(typeof(*x), struct static_key_true) &&\ + !__builtin_types_compatible_p(typeof(*x), struct static_key_false)) \ + ____wrong_branch_error(); \ + static_key_count((struct static_key *)x) > 0; \ +}) + #ifdef HAVE_JUMP_LABEL /* @@ -325,8 +331,6 @@ struct static_key_false { * See jump_label_type() / jump_label_init_type(). */ -extern bool ____wrong_branch_error(void); - #define static_branch_likely(x) \ ({ \ bool branch; \ |