mutex subsystem, debugging code
Subsystems (5)
PATCH 8/10 mutex subsystem, debugging code
mutex implementation - add debugging code.
Signed-off-by Ingo Molnar <[email protected]>
----
include/linux/mutex-debug.h | 21 + include/linux/sched.h | 5 kernel/fork.c | 4 kernel/mutex-debug.c | 527 ++++++++++++++++++++++++++++++++++++++++++++ lib/Kconfig.debug | 8 5 files changed, 565 insertions(+)
include/linux/mutex-debug.h new file +21 -0
@@ -0,0 +1,21 @@ +#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 FASTCALL (mutex_destroy (struct mutex *lock)); + +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 +527 -0
527 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