File: /Users/paulross/dev/linux/linux-3.13/include/linux/debug_locks.h

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: