aboutsummaryrefslogtreecommitdiff
path: root/lib
diff options
context:
space:
mode:
authorIngo Molnar2006-07-03 00:24:51 -0700
committerLinus Torvalds2006-07-03 15:27:04 -0700
commit6c9076ec9cd448f43bbda871352a7067f456ee26 (patch)
tree8691366aa511f20146eb9cfe942e0d94c4136e1a /lib
parentfbb9ce9530fd9b66096d5187fa6a115d16d9746c (diff)
[PATCH] lockdep: allow read_lock() recursion of same class
From: Ingo Molnar <mingo@elte.hu> lockdep so far only allowed read-recursion for the same lock instance. This is enough in the overwhelming majority of cases, but a hostap case triggered and reported by Miles Lane relies on same-class different-instance recursion. So we relax the restriction on read-lock recursion. (This change does not allow rwsem read-recursion, which is still forbidden.) Signed-off-by: Ingo Molnar <mingo@elte.hu> Signed-off-by: Andrew Morton <akpm@osdl.org> Signed-off-by: Linus Torvalds <torvalds@osdl.org>
Diffstat (limited to 'lib')
-rw-r--r--lib/locking-selftest.c8
1 files changed, 4 insertions, 4 deletions
diff --git a/lib/locking-selftest.c b/lib/locking-selftest.c
index 9bdc8d440b2b..7945787f439a 100644
--- a/lib/locking-selftest.c
+++ b/lib/locking-selftest.c
@@ -248,7 +248,7 @@ GENERATE_TESTCASE(AA_rsem)
/*
* Special-case for read-locking, they are
- * allowed to recurse on the same lock instance:
+ * allowed to recurse on the same lock class:
*/
static void rlock_AA1(void)
{
@@ -259,7 +259,7 @@ static void rlock_AA1(void)
static void rlock_AA1B(void)
{
RL(X1);
- RL(X2); // this one should fail
+ RL(X2); // this one should NOT fail
}
static void rsem_AA1(void)
@@ -1132,7 +1132,7 @@ void locking_selftest(void)
init_shared_classes();
debug_locks_silent = !debug_locks_verbose;
- DO_TESTCASE_6("A-A deadlock", AA);
+ DO_TESTCASE_6R("A-A deadlock", AA);
DO_TESTCASE_6R("A-B-B-A deadlock", ABBA);
DO_TESTCASE_6R("A-B-B-C-C-A deadlock", ABBCCA);
DO_TESTCASE_6R("A-B-C-A-B-C deadlock", ABCABC);
@@ -1153,7 +1153,7 @@ void locking_selftest(void)
print_testname("recursive read-lock #2");
printk(" |");
- dotest(rlock_AA1B, FAILURE, LOCKTYPE_RWLOCK);
+ dotest(rlock_AA1B, SUCCESS, LOCKTYPE_RWLOCK);
printk(" |");
dotest(rsem_AA1B, FAILURE, LOCKTYPE_RWSEM);
printk("\n");