The following commit has been merged into the locking/core branch of tip:

Commit-ID:     621c9dac0eea7607cb9a57cc9ba47fbcd4e644c9
Gitweb:        
https://git.kernel.org/tip/621c9dac0eea7607cb9a57cc9ba47fbcd4e644c9
Author:        Boqun Feng <[email protected]>
AuthorDate:    Fri, 07 Aug 2020 15:42:31 +08:00
Committer:     Peter Zijlstra <[email protected]>
CommitterDate: Wed, 26 Aug 2020 12:42:06 +02:00

lockdep: Add recursive read locks into dependency graph

Since we have all the fundamental to handle recursive read locks, we now
add them into the dependency graph.

Signed-off-by: Boqun Feng <[email protected]>
Signed-off-by: Peter Zijlstra (Intel) <[email protected]>
Link: https://lkml.kernel.org/r/[email protected]
---
 kernel/locking/lockdep.c | 19 ++-----------------
 1 file changed, 2 insertions(+), 17 deletions(-)

diff --git a/kernel/locking/lockdep.c b/kernel/locking/lockdep.c
index 6644974..b87766e 100644
--- a/kernel/locking/lockdep.c
+++ b/kernel/locking/lockdep.c
@@ -2809,16 +2809,6 @@ check_prev_add(struct task_struct *curr, struct 
held_lock *prev,
                return 0;
 
        /*
-        * For recursive read-locks we do all the dependency checks,
-        * but we dont store read-triggered dependencies (only
-        * write-triggered dependencies). This ensures that only the
-        * write-side dependencies matter, and that if for example a
-        * write-lock never takes any other locks, then the reads are
-        * equivalent to a NOP.
-        */
-       if (next->read == 2 || prev->read == 2)
-               return 1;
-       /*
         * Is the <prev> -> <next> dependency already present?
         *
         * (this may occur even though this is a new chain: consider
@@ -2935,13 +2925,8 @@ check_prevs_add(struct task_struct *curr, struct 
held_lock *next)
                u16 distance = curr->lockdep_depth - depth + 1;
                hlock = curr->held_locks + depth - 1;
 
-               /*
-                * Only non-recursive-read entries get new dependencies
-                * added:
-                */
-               if (hlock->read != 2 && hlock->check) {
-                       int ret = check_prev_add(curr, hlock, next, distance,
-                                                &trace);
+               if (hlock->check) {
+                       int ret = check_prev_add(curr, hlock, next, distance, 
&trace);
                        if (!ret)
                                return 0;
 

Reply via email to