All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH] lockdep: Let lock_is_held_type() detect recursive read as read
@ 2021-09-01 16:22 Sebastian Andrzej Siewior
  2021-09-01 16:43 ` Boqun Feng
  2021-09-01 18:32 ` Waiman Long
  0 siblings, 2 replies; 13+ messages in thread
From: Sebastian Andrzej Siewior @ 2021-09-01 16:22 UTC (permalink / raw)
  To: linux-kernel
  Cc: Peter Zijlstra, Ingo Molnar, Will Deacon, Waiman Long,
	Boqun Feng, Thomas Gleixner

lock_is_held_type(, 1) detects acquired read locks. It only recognized
locks acquired with lock_acquire_shared(). Read locks acquired with
lock_acquire_shared_recursive() are not recognized because a `2' is
stored as the read value.

Rework the check to additionally recognise lock's read value one and two
as a read held lock.

Fixes: e918188611f07 ("locking: More accurate annotations for read_lock()")
Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
---

On a related note: What exactly means read_lock_is_recursive() in terms
of recursive locking? The second items mentions QRW locks. Does this
mean that a pending WRITER blocks further READER from acquiring the
lock?

 kernel/locking/lockdep.c | 4 +++-
 1 file changed, 3 insertions(+), 1 deletion(-)

diff --git a/kernel/locking/lockdep.c b/kernel/locking/lockdep.c
index f15df3fd7c5a6..39f98454a8827 100644
--- a/kernel/locking/lockdep.c
+++ b/kernel/locking/lockdep.c
@@ -5366,7 +5366,9 @@ int __lock_is_held(const struct lockdep_map *lock, int read)
 		struct held_lock *hlock = curr->held_locks + i;
 
 		if (match_held_lock(hlock, lock)) {
-			if (read == -1 || hlock->read == read)
+			if (read == -1 ||
+			    (read == 0 && hlock->read == 0) ||
+			    (read == 1 && hlock->read > 0))
 				return LOCK_STATE_HELD;
 
 			return LOCK_STATE_NOT_HELD;
-- 
2.33.0


^ permalink raw reply related	[flat|nested] 13+ messages in thread

end of thread, other threads:[~2021-09-17 13:17 UTC | newest]

Thread overview: 13+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2021-09-01 16:22 [PATCH] lockdep: Let lock_is_held_type() detect recursive read as read Sebastian Andrzej Siewior
2021-09-01 16:43 ` Boqun Feng
2021-09-03 10:45   ` Sebastian Andrzej Siewior
2021-09-03 14:15     ` Boqun Feng
2021-09-03 14:30       ` Sebastian Andrzej Siewior
2021-09-01 18:32 ` Waiman Long
2021-09-03  8:40   ` [PATCH v2] " Sebastian Andrzej Siewior
2021-09-08  2:16     ` Boqun Feng
2021-09-08 10:17       ` Peter Zijlstra
2021-09-10 13:53         ` [PATCH v3] " Sebastian Andrzej Siewior
2021-09-08 14:40       ` [PATCH v2] " Waiman Long
2021-09-08 14:35     ` Waiman Long
2021-09-17 13:17     ` [tip: locking/core] " tip-bot2 for Sebastian Andrzej Siewior

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.