diff options
Diffstat (limited to 'include/linux')
| -rw-r--r-- | include/linux/debug_locks.h | 69 | ||||
| -rw-r--r-- | include/linux/init_task.h | 1 | ||||
| -rw-r--r-- | include/linux/mm.h | 8 | ||||
| -rw-r--r-- | include/linux/mutex-debug.h | 12 | ||||
| -rw-r--r-- | include/linux/mutex.h | 6 | ||||
| -rw-r--r-- | include/linux/rtmutex.h | 10 | ||||
| -rw-r--r-- | include/linux/sched.h | 4 | 
7 files changed, 73 insertions, 37 deletions
diff --git a/include/linux/debug_locks.h b/include/linux/debug_locks.h new file mode 100644 index 00000000000..6a7047851e4 --- /dev/null +++ b/include/linux/debug_locks.h @@ -0,0 +1,69 @@ +#ifndef __LINUX_DEBUG_LOCKING_H +#define __LINUX_DEBUG_LOCKING_H + +extern int debug_locks; +extern int debug_locks_silent; + +/* + * Generic 'turn off all lock debugging' function: + */ +extern int debug_locks_off(void); + +/* + * In the debug case we carry the caller's instruction pointer into + * other functions, but we dont want the function argument overhead + * in the nondebug case - hence these macros: + */ +#define _RET_IP_		(unsigned long)__builtin_return_address(0) +#define _THIS_IP_  ({ __label__ __here; __here: (unsigned long)&&__here; }) + +#define DEBUG_LOCKS_WARN_ON(c)						\ +({									\ +	int __ret = 0;							\ +									\ +	if (unlikely(c)) {						\ +		if (debug_locks_off())					\ +			WARN_ON(1);					\ +		__ret = 1;						\ +	}								\ +	__ret;								\ +}) + +#ifdef CONFIG_SMP +# define SMP_DEBUG_LOCKS_WARN_ON(c)			DEBUG_LOCKS_WARN_ON(c) +#else +# define SMP_DEBUG_LOCKS_WARN_ON(c)			do { } while (0) +#endif + +#ifdef CONFIG_DEBUG_LOCKING_API_SELFTESTS +  extern void locking_selftest(void); +#else +# define locking_selftest()	do { } while (0) +#endif + +#ifdef CONFIG_LOCKDEP +extern void debug_show_all_locks(void); +extern void debug_show_held_locks(struct task_struct *task); +extern void debug_check_no_locks_freed(const void *from, unsigned long len); +extern void debug_check_no_locks_held(struct task_struct *task); +#else +static inline void debug_show_all_locks(void) +{ +} + +static inline void debug_show_held_locks(struct task_struct *task) +{ +} + +static inline void +debug_check_no_locks_freed(const void *from, unsigned long len) +{ +} + +static inline void +debug_check_no_locks_held(struct task_struct *task) +{ +} +#endif + +#endif diff --git a/include/linux/init_task.h b/include/linux/init_task.h index 3a256957fb5..678c1a90380 100644 --- a/include/linux/init_task.h +++ b/include/linux/init_task.h @@ -124,7 +124,6 @@ extern struct group_info init_groups;  	.cpu_timers	= INIT_CPU_TIMERS(tsk.cpu_timers),		\  	.fs_excl	= ATOMIC_INIT(0),				\  	.pi_lock	= SPIN_LOCK_UNLOCKED,				\ -	INIT_RT_MUTEXES(tsk)						\  } diff --git a/include/linux/mm.h b/include/linux/mm.h index 75179529e39..990957e0929 100644 --- a/include/linux/mm.h +++ b/include/linux/mm.h @@ -14,6 +14,7 @@  #include <linux/prio_tree.h>  #include <linux/fs.h>  #include <linux/mutex.h> +#include <linux/debug_locks.h>  struct mempolicy;  struct anon_vma; @@ -1034,13 +1035,6 @@ static inline void vm_stat_account(struct mm_struct *mm,  }  #endif /* CONFIG_PROC_FS */ -static inline void -debug_check_no_locks_freed(const void *from, unsigned long len) -{ -	mutex_debug_check_no_locks_freed(from, len); -	rt_mutex_debug_check_no_locks_freed(from, len); -} -  #ifndef CONFIG_DEBUG_PAGEALLOC  static inline void  kernel_map_pages(struct page *page, int numpages, int enable) diff --git a/include/linux/mutex-debug.h b/include/linux/mutex-debug.h index 8b5769f0046..70a26091fc7 100644 --- a/include/linux/mutex-debug.h +++ b/include/linux/mutex-debug.h @@ -7,17 +7,11 @@   * Mutexes - debugging helpers:   */ -#define __DEBUG_MUTEX_INITIALIZER(lockname) \ -	, .held_list = LIST_HEAD_INIT(lockname.held_list), \ -	  .name = #lockname , .magic = &lockname +#define __DEBUG_MUTEX_INITIALIZER(lockname)				\ +	, .magic = &lockname -#define mutex_init(sem)		__mutex_init(sem, __FUNCTION__) +#define mutex_init(sem)		__mutex_init(sem, __FILE__":"#sem)  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, unsigned long len); -  #endif diff --git a/include/linux/mutex.h b/include/linux/mutex.h index f1ac507fa20..caafecd5e36 100644 --- a/include/linux/mutex.h +++ b/include/linux/mutex.h @@ -50,8 +50,6 @@ struct mutex {  	struct list_head	wait_list;  #ifdef CONFIG_DEBUG_MUTEXES  	struct thread_info	*owner; -	struct list_head	held_list; -	unsigned long		acquire_ip;  	const char 		*name;  	void			*magic;  #endif @@ -76,10 +74,6 @@ struct mutex_waiter {  # define __DEBUG_MUTEX_INITIALIZER(lockname)  # define mutex_init(mutex)			__mutex_init(mutex, NULL)  # define mutex_destroy(mutex)				do { } while (0) -# define mutex_debug_show_all_locks()			do { } while (0) -# define mutex_debug_show_held_locks(p)			do { } while (0) -# define mutex_debug_check_no_locks_held(task)		do { } while (0) -# define mutex_debug_check_no_locks_freed(from, len)	do { } while (0)  #endif  #define __MUTEX_INITIALIZER(lockname) \ diff --git a/include/linux/rtmutex.h b/include/linux/rtmutex.h index fa4a3b82ba7..5d41dee82f8 100644 --- a/include/linux/rtmutex.h +++ b/include/linux/rtmutex.h @@ -29,8 +29,6 @@ struct rt_mutex {  	struct task_struct	*owner;  #ifdef CONFIG_DEBUG_RT_MUTEXES  	int			save_state; -	struct list_head	held_list_entry; -	unsigned long		acquire_ip;  	const char 		*name, *file;  	int			line;  	void			*magic; @@ -98,14 +96,6 @@ extern int rt_mutex_trylock(struct rt_mutex *lock);  extern void rt_mutex_unlock(struct rt_mutex *lock); -#ifdef CONFIG_DEBUG_RT_MUTEXES -# define INIT_RT_MUTEX_DEBUG(tsk)					\ -	.held_list_head	= LIST_HEAD_INIT(tsk.held_list_head),		\ -	.held_list_lock	= SPIN_LOCK_UNLOCKED -#else -# define INIT_RT_MUTEX_DEBUG(tsk) -#endif -  #ifdef CONFIG_RT_MUTEXES  # define INIT_RT_MUTEXES(tsk)						\  	.pi_waiters	= PLIST_HEAD_INIT(tsk.pi_waiters, tsk.pi_lock),	\ diff --git a/include/linux/sched.h b/include/linux/sched.h index aaf723308ed..bdabeee10a7 100644 --- a/include/linux/sched.h +++ b/include/linux/sched.h @@ -865,10 +865,6 @@ struct task_struct {  	struct plist_head pi_waiters;  	/* Deadlock detection and priority inheritance handling */  	struct rt_mutex_waiter *pi_blocked_on; -# ifdef CONFIG_DEBUG_RT_MUTEXES -	spinlock_t held_list_lock; -	struct list_head held_list_head; -# endif  #endif  #ifdef CONFIG_DEBUG_MUTEXES  |