Commit 2b9d9e0a authored by Ingo Molnar's avatar Ingo Molnar

locking/mutex: Clarify that mutex_unlock(), and most other sleeping locks, can...

locking/mutex: Clarify that mutex_unlock(), and most other sleeping locks, can still use the lock object after it's unlocked

Clarify the mutex lock lifetime rules a bit more.
Signed-off-by: default avatarIngo Molnar <mingo@kernel.org>
Cc: Peter Zijlstra <peterz@infradead.org>
Cc: Jann Horn <jannh@google.com>
Cc: Linus Torvalds <torvalds@linux-foundation.org>
Link: https://lore.kernel.org/r/20231201121808.GL3818@noisy.programming.kicks-ass.net
parent 67a17233
...@@ -101,12 +101,24 @@ features that make lock debugging easier and faster: ...@@ -101,12 +101,24 @@ features that make lock debugging easier and faster:
- Detects multi-task circular deadlocks and prints out all affected - Detects multi-task circular deadlocks and prints out all affected
locks and tasks (and only those tasks). locks and tasks (and only those tasks).
Releasing a mutex is not an atomic operation: Once a mutex release operation Mutexes - and most other sleeping locks like rwsems - do not provide an
has begun, another context may be able to acquire the mutex before the release implicit reference for the memory they occupy, which reference is released
operation has fully completed. The mutex user must ensure that the mutex is not with mutex_unlock().
destroyed while a release operation is still in progress - in other words,
callers of mutex_unlock() must ensure that the mutex stays alive until [ This is in contrast with spin_unlock() [or completion_done()], which
mutex_unlock() has returned. APIs can be used to guarantee that the memory is not touched by the
lock implementation after spin_unlock()/completion_done() releases
the lock. ]
mutex_unlock() may access the mutex structure even after it has internally
released the lock already - so it's not safe for another context to
acquire the mutex and assume that the mutex_unlock() context is not using
the structure anymore.
The mutex user must ensure that the mutex is not destroyed while a
release operation is still in progress - in other words, callers of
mutex_unlock() must ensure that the mutex stays alive until mutex_unlock()
has returned.
Interfaces Interfaces
---------- ----------
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment