diff options
author | Ingo Molnar <mingo@elte.hu> | 2006-07-03 03:24:51 -0400 |
---|---|---|
committer | Linus Torvalds <torvalds@g5.osdl.org> | 2006-07-03 18:27:04 -0400 |
commit | 6c9076ec9cd448f43bbda871352a7067f456ee26 (patch) | |
tree | 8691366aa511f20146eb9cfe942e0d94c4136e1a /lib | |
parent | fbb9ce9530fd9b66096d5187fa6a115d16d9746c (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.c | 8 |
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) | |||
248 | 248 | ||
249 | /* | 249 | /* |
250 | * Special-case for read-locking, they are | 250 | * Special-case for read-locking, they are |
251 | * allowed to recurse on the same lock instance: | 251 | * allowed to recurse on the same lock class: |
252 | */ | 252 | */ |
253 | static void rlock_AA1(void) | 253 | static void rlock_AA1(void) |
254 | { | 254 | { |
@@ -259,7 +259,7 @@ static void rlock_AA1(void) | |||
259 | static void rlock_AA1B(void) | 259 | static void rlock_AA1B(void) |
260 | { | 260 | { |
261 | RL(X1); | 261 | RL(X1); |
262 | RL(X2); // this one should fail | 262 | RL(X2); // this one should NOT fail |
263 | } | 263 | } |
264 | 264 | ||
265 | static void rsem_AA1(void) | 265 | static void rsem_AA1(void) |
@@ -1132,7 +1132,7 @@ void locking_selftest(void) | |||
1132 | init_shared_classes(); | 1132 | init_shared_classes(); |
1133 | debug_locks_silent = !debug_locks_verbose; | 1133 | debug_locks_silent = !debug_locks_verbose; |
1134 | 1134 | ||
1135 | DO_TESTCASE_6("A-A deadlock", AA); | 1135 | DO_TESTCASE_6R("A-A deadlock", AA); |
1136 | DO_TESTCASE_6R("A-B-B-A deadlock", ABBA); | 1136 | DO_TESTCASE_6R("A-B-B-A deadlock", ABBA); |
1137 | DO_TESTCASE_6R("A-B-B-C-C-A deadlock", ABBCCA); | 1137 | DO_TESTCASE_6R("A-B-B-C-C-A deadlock", ABBCCA); |
1138 | DO_TESTCASE_6R("A-B-C-A-B-C deadlock", ABCABC); | 1138 | DO_TESTCASE_6R("A-B-C-A-B-C deadlock", ABCABC); |
@@ -1153,7 +1153,7 @@ void locking_selftest(void) | |||
1153 | 1153 | ||
1154 | print_testname("recursive read-lock #2"); | 1154 | print_testname("recursive read-lock #2"); |
1155 | printk(" |"); | 1155 | printk(" |"); |
1156 | dotest(rlock_AA1B, FAILURE, LOCKTYPE_RWLOCK); | 1156 | dotest(rlock_AA1B, SUCCESS, LOCKTYPE_RWLOCK); |
1157 | printk(" |"); | 1157 | printk(" |"); |
1158 | dotest(rsem_AA1B, FAILURE, LOCKTYPE_RWSEM); | 1158 | dotest(rsem_AA1B, FAILURE, LOCKTYPE_RWSEM); |
1159 | printk("\n"); | 1159 | printk("\n"); |