linux/include/linux/debug_locks.h
<<
>>
Prefs
   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
   8struct task_struct;
   9
  10extern int debug_locks;
  11extern int debug_locks_silent;
  12
  13
  14static 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 */
  22extern 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
  48struct task_struct;
  49
  50#ifdef CONFIG_LOCKDEP
  51extern void debug_show_all_locks(void);
  52extern void debug_show_held_locks(struct task_struct *task);
  53extern void debug_check_no_locks_freed(const void *from, unsigned long len);
  54extern void debug_check_no_locks_held(void);
  55#else
  56static inline void debug_show_all_locks(void)
  57{
  58}
  59
  60static inline void debug_show_held_locks(struct task_struct *task)
  61{
  62}
  63
  64static inline void
  65debug_check_no_locks_freed(const void *from, unsigned long len)
  66{
  67}
  68
  69static inline void
  70debug_check_no_locks_held(void)
  71{
  72}
  73#endif
  74
  75#endif
  76