diff options
author | Ingo Molnar <mingo@elte.hu> | 2006-12-07 04:39:32 (GMT) |
---|---|---|
committer | Linus Torvalds <torvalds@woody.osdl.org> | 2006-12-07 16:39:43 (GMT) |
commit | 2ee91f197c0bc654b24eed5831fd12aa0d566a7d (patch) | |
tree | 85f9013d1cf17d6a947bbad723ce0cb5427a3dac | |
parent | 50cc670aebf4fc64afaf533fb9fa1c8570f09d74 (diff) | |
download | linux-2ee91f197c0bc654b24eed5831fd12aa0d566a7d.tar.xz |
[PATCH] lockdep: show more details about self-test failures
Make the locking self-test failures (of 'FAILURE' type) easier to debug by
printing more information.
Signed-off-by: Ingo Molnar <mingo@elte.hu>
Signed-off-by: Andrew Morton <akpm@osdl.org>
Signed-off-by: Linus Torvalds <torvalds@osdl.org>
-rw-r--r-- | include/linux/debug_locks.h | 2 | ||||
-rw-r--r-- | kernel/mutex-debug.c | 3 | ||||
-rw-r--r-- | lib/locking-selftest.c | 2 |
3 files changed, 6 insertions, 1 deletions
diff --git a/include/linux/debug_locks.h b/include/linux/debug_locks.h index 952bee7..a1c10b0 100644 --- a/include/linux/debug_locks.h +++ b/include/linux/debug_locks.h @@ -24,7 +24,7 @@ extern int debug_locks_off(void); int __ret = 0; \ \ if (unlikely(c)) { \ - if (debug_locks_off()) \ + if (debug_locks_silent || debug_locks_off()) \ WARN_ON(1); \ __ret = 1; \ } \ diff --git a/kernel/mutex-debug.c b/kernel/mutex-debug.c index 1865164..841539d 100644 --- a/kernel/mutex-debug.c +++ b/kernel/mutex-debug.c @@ -77,6 +77,9 @@ void mutex_remove_waiter(struct mutex *lock, struct mutex_waiter *waiter, void debug_mutex_unlock(struct mutex *lock) { + if (unlikely(!debug_locks)) + return; + DEBUG_LOCKS_WARN_ON(lock->owner != current_thread_info()); DEBUG_LOCKS_WARN_ON(lock->magic != lock); DEBUG_LOCKS_WARN_ON(!lock->wait_list.prev && !lock->wait_list.next); diff --git a/lib/locking-selftest.c b/lib/locking-selftest.c index 7945787..280332c 100644 --- a/lib/locking-selftest.c +++ b/lib/locking-selftest.c @@ -963,7 +963,9 @@ static void dotest(void (*testcase_fn)(void), int expected, int lockclass_mask) printk("failed|"); } else { unexpected_testcase_failures++; + printk("FAILED|"); + dump_stack(); } } else { testcase_successes++; |