[RFC/PATCH PATCH 1/6] lockdep: Remove redundant read checks.

From: Gautham R Shenoy
Date: Mon May 11 2009 - 08:39:51 EST


1) In kernel/lockdep.c::validate_chain()
ret = check_deadlock(curr, hlock, lock, hlock->read);
ret = 2 only if hlock->read = 2.

Hence,
if (ret == 2)
hlock->read = 2;
is redundant, hence can be removed.

2) In kernel/lockdep.c::check_prevs_add(curr, next)
if (hlock->read != 2)
check_prev_add(curr, hlock, next, distance);

Thus, check_prev_add is called only when hlock->read != 2.

>From the conclusions of 2),
kernel/lockdep.c::check_prev_add(curr, prev, next, distance) gets called
iff prev->read != 2.
Hence, in kernel/lockdep.c::check_prev_add(curr, prev, next, distance)
if (prev->read == 2)
return 1;
is redunant, hence can be removed.


Signed-off-by: Gautham R Shenoy <ego@xxxxxxxxxx>
---

kernel/lockdep.c | 9 +--------
1 files changed, 1 insertions(+), 8 deletions(-)

diff --git a/kernel/lockdep.c b/kernel/lockdep.c
index accb40c..8d3c2b5 100644
--- a/kernel/lockdep.c
+++ b/kernel/lockdep.c
@@ -1496,7 +1496,7 @@ check_prev_add(struct task_struct *curr, struct held_lock *prev,
* write-lock never takes any other locks, then the reads are
* equivalent to a NOP.
*/
- if (next->read == 2 || prev->read == 2)
+ if (next->read == 2)
return 1;
/*
* Is the <prev> -> <next> dependency already present?
@@ -1754,13 +1754,6 @@ static int validate_chain(struct task_struct *curr, struct lockdep_map *lock,
if (!ret)
return 0;
/*
- * Mark recursive read, as we jump over it when
- * building dependencies (just like we jump over
- * trylock entries):
- */
- if (ret == 2)
- hlock->read = 2;
- /*
* Add dependency only if this lock is not the head
* of the chain, and if it's not a secondary read-lock:
*/

--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/