mutex subsystem, debugging code
Subsystems (5)
PATCH 7/8 mutex subsystem, debugging code
mutex implementation - add debugging code.
Signed-off-by Ingo Molnar <[email protected]>
----
include/linux/mutex-debug.h | 19 + include/linux/sched.h | 5 kernel/fork.c | 4 kernel/mutex-debug.c | 509 ++++++++++++++++++++++++++++++++++++++++++++ lib/Kconfig.debug | 8 5 files changed, 545 insertions(+)
include/linux/mutex-debug.h new file +19 -0
@@ -0,0 +1,19 @@ +#ifndef __LINUX_MUTEX_DEBUG_H +#define __LINUX_MUTEX_DEBUG_H + +/* +* Mutexes - debugging helpers: +*/ + +#define __DEBUG_MUTEX_INITIALIZER (lockname) \ + , .held_list = LIST_HEAD_INIT(lockname.held_list), \ + .name = #lockname , .magic = &lockname + +#define mutex_init (sem) __mutex_init(sem, __FUNCTION__) + +extern void mutex_debug_show_all_locks (void ); +extern void mutex_debug_show_held_locks (struct task_struct *filter); +extern void mutex_debug_check_no_locks_held (struct task_struct *task); +extern void mutex_debug_check_no_locks_freed (const void *from,const void *to); + +#endif
include/linux/sched.h +5 -0
@@ -820,6 +820,11 @@ struct task_struct {/* Protection of proc_dentry: nesting proc_lock, dcache_lock, write_lock_irq(&tasklist_lock); */ spinlock_t proc_lock; +#ifdef CONFIG_DEBUG_MUTEXES +/* mutex deadlock detection */ +struct mutex_waiter *blocked_on; +#endif +/* journalling filesystem info */ void *journal_info;
kernel/fork.c +4 -0
@@ -973,6 +973,10 @@ static task_t *copy_process(unsigned lon }#endif +#ifdef CONFIG_DEBUG_MUTEXES + p->blocked_on =NULL ;/* not blocked yet */ +#endif + p->tgid = p->pid;if (clone_flags &CLONE_THREAD ) p->tgid = current->tgid;
kernel/mutex-debug.c new file +509 -0
509 lines not on this page · raw message
lib/Kconfig.debug +8 -0
@@ -95,6 +95,14 @@ config DEBUG_PREEMPT if kernel code uses it in a preemption-unsafe way. Also, the kernel will detect preemption count underflows. +config DEBUG_MUTEXES + bool "Mutex debugging, deadlock detection" + default y + depends on DEBUG_KERNEL + help + This allows mutex semantics violations and mutex related deadlocks + (lockups) to be detected and reported automatically. + config DEBUG_SPINLOCK bool "Spinlock debugging" depends on DEBUG_KERNEL