summaryrefslogtreecommitdiffstats
path: root/kernel/lockdep.c
diff options
context:
space:
mode:
authorPeter Zijlstra <a.p.zijlstra@chello.nl>2007-10-11 22:11:12 +0200
committerPeter Zijlstra <a.p.zijlstra@chello.nl>2007-10-11 22:11:12 +0200
commitb351d164e860d1ffffdc501c32f55dd1446c385b (patch)
tree6fcef2c4ece9ff2772306a3b65e9c7e2fcc4d39a /kernel/lockdep.c
parente4564f79d4b6923da7360df4b24a48cc2d4160de (diff)
downloadlinux-stable-b351d164e860d1ffffdc501c32f55dd1446c385b.tar.gz
linux-stable-b351d164e860d1ffffdc501c32f55dd1446c385b.tar.bz2
linux-stable-b351d164e860d1ffffdc501c32f55dd1446c385b.zip
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.c16
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);
+ }
+}