diff options
author | Peter Zijlstra <a.p.zijlstra@chello.nl> | 2007-10-12 00:11:12 +0400 |
---|---|---|
committer | Peter Zijlstra <a.p.zijlstra@chello.nl> | 2007-10-12 00:11:12 +0400 |
commit | b351d164e860d1ffffdc501c32f55dd1446c385b (patch) | |
tree | 6fcef2c4ece9ff2772306a3b65e9c7e2fcc4d39a /kernel/lockdep.c | |
parent | e4564f79d4b6923da7360df4b24a48cc2d4160de (diff) | |
download | linux-b351d164e860d1ffffdc501c32f55dd1446c385b.tar.xz |
lockdep: syscall exit check
Provide a check to validate that we do not hold any locks when switching
back to user-space.
Signed-off-by: Peter Zijlstra <a.p.zijlstra@chello.nl>
Signed-off-by: Ingo Molnar <mingo@elte.hu>
Diffstat (limited to 'kernel/lockdep.c')
-rw-r--r-- | kernel/lockdep.c | 16 |
1 files changed, 16 insertions, 0 deletions
diff --git a/kernel/lockdep.c b/kernel/lockdep.c index 42ae4a5ab4dc..a6f1ee9c92d9 100644 --- a/kernel/lockdep.c +++ b/kernel/lockdep.c @@ -3199,3 +3199,19 @@ void debug_show_held_locks(struct task_struct *task) } EXPORT_SYMBOL_GPL(debug_show_held_locks); + +void lockdep_sys_exit(void) +{ + struct task_struct *curr = current; + + if (unlikely(curr->lockdep_depth)) { + if (!debug_locks_off()) + return; + printk("\n================================================\n"); + printk( "[ BUG: lock held when returning to user space! ]\n"); + printk( "------------------------------------------------\n"); + printk("%s/%d is leaving the kernel with locks still held!\n", + curr->comm, curr->pid); + lockdep_print_held_locks(curr); + } +} |