]>
Commit | Line | Data |
---|---|---|
9a11b49a IM |
1 | #ifndef __LINUX_DEBUG_LOCKING_H |
2 | #define __LINUX_DEBUG_LOCKING_H | |
3 | ||
ca31e146 | 4 | #include <linux/kernel.h> |
60063497 | 5 | #include <linux/atomic.h> |
187f1882 | 6 | #include <linux/bug.h> |
27b19565 | 7 | #include <asm/system.h> |
ca31e146 | 8 | |
9b7f750d AD |
9 | struct task_struct; |
10 | ||
9a11b49a IM |
11 | extern int debug_locks; |
12 | extern int debug_locks_silent; | |
13 | ||
9eeba613 FW |
14 | |
15 | static inline int __debug_locks_off(void) | |
16 | { | |
17 | return xchg(&debug_locks, 0); | |
18 | } | |
19 | ||
9a11b49a IM |
20 | /* |
21 | * Generic 'turn off all lock debugging' function: | |
22 | */ | |
23 | extern int debug_locks_off(void); | |
24 | ||
9a11b49a IM |
25 | #define DEBUG_LOCKS_WARN_ON(c) \ |
26 | ({ \ | |
27 | int __ret = 0; \ | |
28 | \ | |
53b9d87f | 29 | if (!oops_in_progress && unlikely(c)) { \ |
9127d4b1 | 30 | if (debug_locks_off() && !debug_locks_silent) \ |
9a11b49a IM |
31 | WARN_ON(1); \ |
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 | ||
f86e4513 KM |
49 | struct task_struct; |
50 | ||
9a11b49a IM |
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(struct task_struct *task); | |
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(struct task_struct *task) | |
72 | { | |
73 | } | |
74 | #endif | |
75 | ||
76 | #endif |