Green shading in the line number column means the source is part of the translation unit, red means it is conditionally excluded. Highlighted line numbers link to the translation unit page. Highlighted macros link to the macro page.
1: #ifndef __LINUX_DEBUG_LOCKING_H 2: #define __LINUX_DEBUG_LOCKING_H 3: 4: #include <linux/kernel.h> 5: #include <linux/atomic.h> 6: #include <linux/bug.h> 7: 8: struct task_struct; 9: 10: extern int debug_locks; 11: extern int debug_locks_silent; 12: 13: 14: static inline int __debug_locks_off(void) 15: { 16: return xchg(&debug_locks, 0); 17: } 18: 19: /* 20: * Generic 'turn off all lock debugging' function: 21: */ 22: extern int debug_locks_off(void); 23: 24: #define DEBUG_LOCKS_WARN_ON(c) \ 25: ({ \ 26: int __ret = 0; \ 27: \ 28: if (!oops_in_progress && unlikely(c)) { \ 29: if (debug_locks_off() && !debug_locks_silent) \ 30: WARN(1, "DEBUG_LOCKS_WARN_ON(%s)", #c); \ 31: __ret = 1; \ 32: } \ 33: __ret; \ 34: }) 35: 36: #ifdef CONFIG_SMP 37: # define SMP_DEBUG_LOCKS_WARN_ON(c) DEBUG_LOCKS_WARN_ON(c) 38: #else 39: # define SMP_DEBUG_LOCKS_WARN_ON(c) do { } while (0) 40: #endif 41: 42: #ifdef CONFIG_DEBUG_LOCKING_API_SELFTESTS 43: extern void locking_selftest(void); 44: #else 45: # define locking_selftest() do { } while (0) 46: #endif 47: 48: struct task_struct; 49: 50: #ifdef CONFIG_LOCKDEP 51: extern void debug_show_all_locks(void); 52: extern void debug_show_held_locks(struct task_struct *task); 53: extern void debug_check_no_locks_freed(const void *from, unsigned long len); 54: extern void debug_check_no_locks_held(void); 55: #else 56: static inline void debug_show_all_locks(void) 57: { 58: } 59: 60: static inline void debug_show_held_locks(struct task_struct *task) 61: { 62: } 63: 64: static inline void 65: debug_check_no_locks_freed(const void *from, unsigned long len) 66: { 67: } 68: 69: static inline void 70: debug_check_no_locks_held(void) 71: { 72: } 73: #endif 74: 75: #endif 76: