File tree Expand file tree Collapse file tree
Expand file tree Collapse file tree Original file line number Diff line number Diff line change @@ -101,12 +101,24 @@ features that make lock debugging easier and faster:
101101 - Detects multi-task circular deadlocks and prints out all affected
102102 locks and tasks (and only those tasks).
103103
104- Releasing a mutex is not an atomic operation: Once a mutex release operation
105- has begun, another context may be able to acquire the mutex before the release
106- operation has fully completed. The mutex user must ensure that the mutex is not
107- destroyed while a release operation is still in progress - in other words,
108- callers of mutex_unlock() must ensure that the mutex stays alive until
109- mutex_unlock() has returned.
104+ Mutexes - and most other sleeping locks like rwsems - do not provide an
105+ implicit reference for the memory they occupy, which reference is released
106+ with mutex_unlock().
107+
108+ [ This is in contrast with spin_unlock() [or completion_done()], which
109+ APIs can be used to guarantee that the memory is not touched by the
110+ lock implementation after spin_unlock()/completion_done() releases
111+ the lock. ]
112+
113+ mutex_unlock() may access the mutex structure even after it has internally
114+ released the lock already - so it's not safe for another context to
115+ acquire the mutex and assume that the mutex_unlock() context is not using
116+ the structure anymore.
117+
118+ The mutex user must ensure that the mutex is not destroyed while a
119+ release operation is still in progress - in other words, callers of
120+ mutex_unlock() must ensure that the mutex stays alive until mutex_unlock()
121+ has returned.
110122
111123Interfaces
112124----------
You can’t perform that action at this time.
0 commit comments