mirror of
https://mirrors.bfsu.edu.cn/git/linux.git
synced 2024-11-27 14:14:24 +08:00
jump_label: Clarify condition in static_key_fast_inc_not_disabled()
The second part of if (v <= 0 || (v + 1) < 0) is not immediately obvious that it acts as overflow protection. Check explicitely for v == INT_MAX instead and add a proper comment how this is used at the call sites. Signed-off-by: Thomas Gleixner <tglx@linutronix.de> Signed-off-by: Peter Zijlstra (Intel) <peterz@infradead.org> Link: https://lkml.kernel.org/r/20240610124406.484973160@linutronix.de
This commit is contained in:
parent
83ab38ef0a
commit
695ef79646
@ -132,12 +132,15 @@ bool static_key_fast_inc_not_disabled(struct static_key *key)
|
||||
/*
|
||||
* Negative key->enabled has a special meaning: it sends
|
||||
* static_key_slow_inc/dec() down the slow path, and it is non-zero
|
||||
* so it counts as "enabled" in jump_label_update(). Note that
|
||||
* atomic_inc_unless_negative() checks >= 0, so roll our own.
|
||||
* so it counts as "enabled" in jump_label_update().
|
||||
*
|
||||
* The INT_MAX overflow condition is either used by the networking
|
||||
* code to reset or detected in the slow path of
|
||||
* static_key_slow_inc_cpuslocked().
|
||||
*/
|
||||
v = atomic_read(&key->enabled);
|
||||
do {
|
||||
if (v <= 0 || (v + 1) < 0)
|
||||
if (v <= 0 || v == INT_MAX)
|
||||
return false;
|
||||
} while (!likely(atomic_try_cmpxchg(&key->enabled, &v, v + 1)));
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user