root/include/linux/debug_locks.h

/* [<][>][^][v][top][bottom][index][help] */

INCLUDED FROM


DEFINITIONS

This source file includes following definitions.
  1. __debug_locks_off
  2. debug_show_all_locks
  3. debug_show_held_locks
  4. debug_check_no_locks_freed
  5. debug_check_no_locks_held

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

/* [<][>][^][v][top][bottom][index][help] */