• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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;
12  extern int debug_locks_silent;
13  
14  
__debug_locks_off(void)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
debug_show_all_locks(void)57  static inline void debug_show_all_locks(void)
58  {
59  }
60  
debug_show_held_locks(struct task_struct * task)61  static inline void debug_show_held_locks(struct task_struct *task)
62  {
63  }
64  
65  static inline void
debug_check_no_locks_freed(const void * from,unsigned long len)66  debug_check_no_locks_freed(const void *from, unsigned long len)
67  {
68  }
69  
70  static inline void
debug_check_no_locks_held(void)71  debug_check_no_locks_held(void)
72  {
73  }
74  #endif
75  
76  #endif
77