Skip to contentSkip to conversation

static-keys: Better error checking for static_key_enable/disable

PATCH In review Chuck Ebbert 2 participants 2 messages Aug 27, 2015 Static branch/call

lore
Share & tools
lore
#0 lore raw

PATCH 1/1 static-keys: Better error checking for static_key_enable/disable

The warnings for static_key_enable/disable don't catch common errors. For example, starting with a default enabled key and calling enable doesn't cause a warning until the next enable or disable. Check explicitly for zero or one instead of allowing both values in every case. Generated code should be smaller too.

include/linux/jump_label.h +2 -2
index 7f653e8..ba9ca0c 100644
@@ -225,7 +225,7 @@ static inline void static_key_enable(struct static_key *key)
 {
 	int count = static_key_count(key);
 
-	WARN_ON_ONCE(count < 0 || count > 1);
+	WARN_ON_ONCE(count);
 
 	if (!count)
 		static_key_slow_inc(key);
@@ -235,7 +235,7 @@ static inline void static_key_disable(struct static_key *key)
 {
 	int count = static_key_count(key);
 
-	WARN_ON_ONCE(count < 0 || count > 1);
+	WARN_ON_ONCE(count != 1);
 
 	if (count)
 		static_key_slow_dec(key);
maintainer
#1 lore raw
Quoted 5 lines · Chuck Ebbert

The warnings for static_key_enable/disable don't catch common errors. For example, starting with a default enabled key and calling enable doesn't cause a warning until the next enable or disable. Check explicitly for zero or one instead of allowing both values in every case. Generated code should be smaller too.

I explicitly intended to allow multiple consecutive static_key_enable() calls (same for disable).

If its already enabled, calling enable should be a no-op.