1 #ifndef __LINUX_DEBUG_LOCKING_H 2 #define __LINUX_DEBUG_LOCKING_H 3 4 #include <linux/kernel.h> 5 6 struct task_struct; 7 8 extern int debug_locks; 9 extern int debug_locks_silent; 10 11 /* 12 * Generic 'turn off all lock debugging' function: 13 */ 14 extern int debug_locks_off(void); 15 16 #define DEBUG_LOCKS_WARN_ON(c) \ 17 ({ \ 18 int __ret = 0; \ 19 \ 20 if (!oops_in_progress && unlikely(c)) { \ 21 if (debug_locks_off() && !debug_locks_silent) \ 22 WARN_ON(1); \ 23 __ret = 1; \ 24 } \ 25 __ret; \ 26 }) 27 28 #ifdef CONFIG_SMP 29 # define SMP_DEBUG_LOCKS_WARN_ON(c) DEBUG_LOCKS_WARN_ON(c) 30 #else 31 # define SMP_DEBUG_LOCKS_WARN_ON(c) do { } while (0) 32 #endif 33 34 #ifdef CONFIG_DEBUG_LOCKING_API_SELFTESTS 35 extern void locking_selftest(void); 36 #else 37 # define locking_selftest() do { } while (0) 38 #endif 39 40 struct task_struct; 41 42 #ifdef CONFIG_LOCKDEP 43 extern void debug_show_all_locks(void); 44 extern void __debug_show_held_locks(struct task_struct *task); 45 extern void debug_show_held_locks(struct task_struct *task); 46 extern void debug_check_no_locks_freed(const void *from, unsigned long len); 47 extern void debug_check_no_locks_held(struct task_struct *task); 48 #else debug_show_all_locks(void)49static inline void debug_show_all_locks(void) 50 { 51 } 52 __debug_show_held_locks(struct task_struct * task)53static inline void __debug_show_held_locks(struct task_struct *task) 54 { 55 } 56 debug_show_held_locks(struct task_struct * task)57static inline void debug_show_held_locks(struct task_struct *task) 58 { 59 } 60 61 static inline void debug_check_no_locks_freed(const void * from,unsigned long len)62debug_check_no_locks_freed(const void *from, unsigned long len) 63 { 64 } 65 66 static inline void debug_check_no_locks_held(struct task_struct * task)67debug_check_no_locks_held(struct task_struct *task) 68 { 69 } 70 #endif 71 72 #endif 73