1b1d2fb444
The only existing caller to debug_check_no_locks_held calls it with 'current' as the task, and the freezer needs to call debug_check_no_locks_held but doesn't already have a current task pointer, so remove the argument. It is already assuming that the current task is relevant by dumping the current stack trace as part of the warning. This was originally part of6aa9707099
(lockdep: check that no locks held at freeze time) which was reverted indbf520a9d7
. Original-author: Mandeep Singh Baines <msb@chromium.org> Acked-by: Pavel Machek <pavel@ucw.cz> Acked-by: Tejun Heo <tj@kernel.org> Signed-off-by: Colin Cross <ccross@android.com> Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
75 lines
1.5 KiB
C
75 lines
1.5 KiB
C
#ifndef __LINUX_DEBUG_LOCKING_H
|
|
#define __LINUX_DEBUG_LOCKING_H
|
|
|
|
#include <linux/kernel.h>
|
|
#include <linux/atomic.h>
|
|
#include <linux/bug.h>
|
|
|
|
struct task_struct;
|
|
|
|
extern int debug_locks;
|
|
extern int debug_locks_silent;
|
|
|
|
|
|
static inline int __debug_locks_off(void)
|
|
{
|
|
return xchg(&debug_locks, 0);
|
|
}
|
|
|
|
/*
|
|
* Generic 'turn off all lock debugging' function:
|
|
*/
|
|
extern int debug_locks_off(void);
|
|
|
|
#define DEBUG_LOCKS_WARN_ON(c) \
|
|
({ \
|
|
int __ret = 0; \
|
|
\
|
|
if (!oops_in_progress && unlikely(c)) { \
|
|
if (debug_locks_off() && !debug_locks_silent) \
|
|
WARN(1, "DEBUG_LOCKS_WARN_ON(%s)", #c); \
|
|
__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
|
|
|
|
struct task_struct;
|
|
|
|
#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(void);
|
|
#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(void)
|
|
{
|
|
}
|
|
#endif
|
|
|
|
#endif
|