diff options
author | Waiman Long <longman@redhat.com> | 2021-03-16 11:31:17 -0400 |
---|---|---|
committer | Ingo Molnar <mingo@kernel.org> | 2021-03-17 09:56:45 +0100 |
commit | bee645788e07eea63055d261d2884ea45c2ba857 (patch) | |
tree | c1a24ad94682be28baceeec4b1b3608f41cd0158 | |
parent | 5de2055d31ea88fd9ae9709ac95c372a505a60fa (diff) | |
download | lwn-bee645788e07eea63055d261d2884ea45c2ba857.tar.gz lwn-bee645788e07eea63055d261d2884ea45c2ba857.zip |
locking/ww_mutex: Fix acquire/release imbalance in ww_acquire_init()/ww_acquire_fini()
In ww_acquire_init(), mutex_acquire() is gated by CONFIG_DEBUG_LOCK_ALLOC.
The dep_map in the ww_acquire_ctx structure is also gated by the
same config. However mutex_release() in ww_acquire_fini() is gated by
CONFIG_DEBUG_MUTEXES. It is possible to set CONFIG_DEBUG_MUTEXES without
setting CONFIG_DEBUG_LOCK_ALLOC though it is an unlikely configuration.
That may cause a compilation error as dep_map isn't defined in this
case. Fix this potential problem by enclosing mutex_release() inside
CONFIG_DEBUG_LOCK_ALLOC.
Signed-off-by: Waiman Long <longman@redhat.com>
Signed-off-by: Ingo Molnar <mingo@kernel.org>
Link: https://lore.kernel.org/r/20210316153119.13802-3-longman@redhat.com
-rw-r--r-- | include/linux/ww_mutex.h | 5 |
1 files changed, 3 insertions, 2 deletions
diff --git a/include/linux/ww_mutex.h b/include/linux/ww_mutex.h index 850424e5d030..6ecf2a0220db 100644 --- a/include/linux/ww_mutex.h +++ b/include/linux/ww_mutex.h @@ -173,9 +173,10 @@ static inline void ww_acquire_done(struct ww_acquire_ctx *ctx) */ static inline void ww_acquire_fini(struct ww_acquire_ctx *ctx) { -#ifdef CONFIG_DEBUG_MUTEXES +#ifdef CONFIG_DEBUG_LOCK_ALLOC mutex_release(&ctx->dep_map, _THIS_IP_); - +#endif +#ifdef CONFIG_DEBUG_MUTEXES DEBUG_LOCKS_WARN_ON(ctx->acquired); if (!IS_ENABLED(CONFIG_PROVE_LOCKING)) /* |