Blame view

include/linux/debug_locks.h 1.49 KB
9a11b49a8   Ingo Molnar   [PATCH] lockdep: ...
1
2
  #ifndef __LINUX_DEBUG_LOCKING_H
  #define __LINUX_DEBUG_LOCKING_H
ca31e146d   Eduard - Gabriel Munteanu   Move _RET_IP_ and...
3
  #include <linux/kernel.h>
60063497a   Arun Sharma   atomic: use <linu...
4
  #include <linux/atomic.h>
27b19565f   Ingo Molnar   lockdep: warn abo...
5
  #include <asm/system.h>
ca31e146d   Eduard - Gabriel Munteanu   Move _RET_IP_ and...
6

9b7f750d4   Alexey Dobriyan   [PATCH] debug_loc...
7
  struct task_struct;
9a11b49a8   Ingo Molnar   [PATCH] lockdep: ...
8
9
  extern int debug_locks;
  extern int debug_locks_silent;
9eeba6138   Frederic Weisbecker   lockdep: warn abo...
10
11
12
13
14
  
  static inline int __debug_locks_off(void)
  {
  	return xchg(&debug_locks, 0);
  }
9a11b49a8   Ingo Molnar   [PATCH] lockdep: ...
15
16
17
18
  /*
   * Generic 'turn off all lock debugging' function:
   */
  extern int debug_locks_off(void);
9a11b49a8   Ingo Molnar   [PATCH] lockdep: ...
19
20
21
22
  #define DEBUG_LOCKS_WARN_ON(c)						\
  ({									\
  	int __ret = 0;							\
  									\
53b9d87f4   Andrew Morton   lock debug: sit t...
23
  	if (!oops_in_progress && unlikely(c)) {				\
9127d4b1d   Ingo Molnar   [PATCH] lock debu...
24
  		if (debug_locks_off() && !debug_locks_silent)		\
9a11b49a8   Ingo Molnar   [PATCH] lockdep: ...
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
  			WARN_ON(1);					\
  		__ret = 1;						\
  	}								\
  	__ret;								\
  })
  
  #ifdef CONFIG_SMP
  # define SMP_DEBUG_LOCKS_WARN_ON(c)			DEBUG_LOCKS_WARN_ON(c)
  #else
  # define SMP_DEBUG_LOCKS_WARN_ON(c)			do { } while (0)
  #endif
  
  #ifdef CONFIG_DEBUG_LOCKING_API_SELFTESTS
    extern void locking_selftest(void);
  #else
  # define locking_selftest()	do { } while (0)
  #endif
f86e45131   Kyle McMartin   [PATCH] Need forw...
42
  struct task_struct;
9a11b49a8   Ingo Molnar   [PATCH] lockdep: ...
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
  #ifdef CONFIG_LOCKDEP
  extern void debug_show_all_locks(void);
  extern void debug_show_held_locks(struct task_struct *task);
  extern void debug_check_no_locks_freed(const void *from, unsigned long len);
  extern void debug_check_no_locks_held(struct task_struct *task);
  #else
  static inline void debug_show_all_locks(void)
  {
  }
  
  static inline void debug_show_held_locks(struct task_struct *task)
  {
  }
  
  static inline void
  debug_check_no_locks_freed(const void *from, unsigned long len)
  {
  }
  
  static inline void
  debug_check_no_locks_held(struct task_struct *task)
  {
  }
  #endif
  
  #endif