diff options
author | Paul E. McKenney <paulmck@linux.vnet.ibm.com> | 2010-02-22 20:04:47 -0500 |
---|---|---|
committer | Ingo Molnar <mingo@elte.hu> | 2010-02-25 03:41:01 -0500 |
commit | 0632eb3d7563d6a76d49a3860b6352d800c92854 (patch) | |
tree | d998e6d4292a21a91ba1333ffdb1866daf1cfee2 /kernel/lockdep.c | |
parent | c26d34a5858f96a564c45048bf5f09319d2abad1 (diff) |
rcu: Integrate rcu_dereference_check() message into lockdep
Make rcu_dereference_check() print the list of held locks in
addition to the stack dump to ease debugging.
Signed-off-by: Paul E. McKenney <paulmck@linux.vnet.ibm.com>
Cc: laijs@cn.fujitsu.com
Cc: dipankar@in.ibm.com
Cc: mathieu.desnoyers@polymtl.ca
Cc: josh@joshtriplett.org
Cc: dvhltc@us.ibm.com
Cc: niv@us.ibm.com
Cc: peterz@infradead.org
Cc: rostedt@goodmis.org
Cc: Valdis.Kletnieks@vt.edu
Cc: dhowells@redhat.com
LKML-Reference: <1266887105-1528-3-git-send-email-paulmck@linux.vnet.ibm.com>
Signed-off-by: Ingo Molnar <mingo@elte.hu>
Diffstat (limited to 'kernel/lockdep.c')
-rw-r--r-- | kernel/lockdep.c | 18 |
1 files changed, 18 insertions, 0 deletions
diff --git a/kernel/lockdep.c b/kernel/lockdep.c index c62ec14609b9..672c436946ce 100644 --- a/kernel/lockdep.c +++ b/kernel/lockdep.c | |||
@@ -3809,3 +3809,21 @@ void lockdep_sys_exit(void) | |||
3809 | lockdep_print_held_locks(curr); | 3809 | lockdep_print_held_locks(curr); |
3810 | } | 3810 | } |
3811 | } | 3811 | } |
3812 | |||
3813 | void lockdep_rcu_dereference(const char *file, const int line) | ||
3814 | { | ||
3815 | struct task_struct *curr = current; | ||
3816 | |||
3817 | if (!debug_locks_off()) | ||
3818 | return; | ||
3819 | printk("\n==============================================\n"); | ||
3820 | printk( "[ BUG: Unsafe rcu_dereference_check() usage! ]\n"); | ||
3821 | printk( "----------------------------------------------\n"); | ||
3822 | printk("%s:%d invoked rcu_dereference_check() without protection!\n", | ||
3823 | file, line); | ||
3824 | printk("\nother info that might help us debug this:\n\n"); | ||
3825 | lockdep_print_held_locks(curr); | ||
3826 | printk("\nstack backtrace:\n"); | ||
3827 | dump_stack(); | ||
3828 | } | ||
3829 | EXPORT_SYMBOL_GPL(lockdep_rcu_dereference); | ||