Branch data Line data Source code
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 : 0 : 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