diff options
| -rw-r--r-- | kernel/lockdep.c | 5 | ||||
| -rw-r--r-- | lib/locking-selftest.c | 8 |
2 files changed, 6 insertions, 7 deletions
diff --git a/kernel/lockdep.c b/kernel/lockdep.c index dd0580910a97..f32ca78c198d 100644 --- a/kernel/lockdep.c +++ b/kernel/lockdep.c | |||
| @@ -843,10 +843,9 @@ check_deadlock(struct task_struct *curr, struct held_lock *next, | |||
| 843 | continue; | 843 | continue; |
| 844 | /* | 844 | /* |
| 845 | * Allow read-after-read recursion of the same | 845 | * Allow read-after-read recursion of the same |
| 846 | * lock instance (i.e. read_lock(lock)+read_lock(lock)): | 846 | * lock class (i.e. read_lock(lock)+read_lock(lock)): |
| 847 | */ | 847 | */ |
| 848 | if ((read == 2) && prev->read && | 848 | if ((read == 2) && prev->read) |
| 849 | (prev->instance == next_instance)) | ||
| 850 | return 2; | 849 | return 2; |
| 851 | return print_deadlock_bug(curr, prev, next); | 850 | return print_deadlock_bug(curr, prev, next); |
| 852 | } | 851 | } |
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"); |
