aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--include/linux/debug_locks.h7
-rw-r--r--kernel/panic.c10
-rw-r--r--lib/debug_locks.c2
3 files changed, 16 insertions, 3 deletions
diff --git a/include/linux/debug_locks.h b/include/linux/debug_locks.h
index 096476f1fb35..493dedb7a67b 100644
--- a/include/linux/debug_locks.h
+++ b/include/linux/debug_locks.h
@@ -2,12 +2,19 @@
2#define __LINUX_DEBUG_LOCKING_H 2#define __LINUX_DEBUG_LOCKING_H
3 3
4#include <linux/kernel.h> 4#include <linux/kernel.h>
5#include <asm/atomic.h>
5 6
6struct task_struct; 7struct task_struct;
7 8
8extern int debug_locks; 9extern int debug_locks;
9extern int debug_locks_silent; 10extern int debug_locks_silent;
10 11
12
13static inline int __debug_locks_off(void)
14{
15 return xchg(&debug_locks, 0);
16}
17
11/* 18/*
12 * Generic 'turn off all lock debugging' function: 19 * Generic 'turn off all lock debugging' function:
13 */ 20 */
diff --git a/kernel/panic.c b/kernel/panic.c
index 3fd8c5bf8b39..940ca14f6dbf 100644
--- a/kernel/panic.c
+++ b/kernel/panic.c
@@ -213,8 +213,14 @@ unsigned long get_taint(void)
213 213
214void add_taint(unsigned flag) 214void add_taint(unsigned flag)
215{ 215{
216 /* can't trust the integrity of the kernel anymore: */ 216 /*
217 debug_locks = 0; 217 * Can't trust the integrity of the kernel anymore.
218 * We don't call directly debug_locks_off() because the issue
219 * is not necessarily serious enough to set oops_in_progress to 1
220 */
221 if (__debug_locks_off())
222 printk(KERN_WARNING "Disabling lockdep due to kernel taint\n");
223
218 set_bit(flag, &tainted_mask); 224 set_bit(flag, &tainted_mask);
219} 225}
220EXPORT_SYMBOL(add_taint); 226EXPORT_SYMBOL(add_taint);
diff --git a/lib/debug_locks.c b/lib/debug_locks.c
index 0218b4693dd8..bc3b11731b9c 100644
--- a/lib/debug_locks.c
+++ b/lib/debug_locks.c
@@ -36,7 +36,7 @@ int debug_locks_silent;
36 */ 36 */
37int debug_locks_off(void) 37int debug_locks_off(void)
38{ 38{
39 if (xchg(&debug_locks, 0)) { 39 if (__debug_locks_off()) {
40 if (!debug_locks_silent) { 40 if (!debug_locks_silent) {
41 oops_in_progress = 1; 41 oops_in_progress = 1;
42 console_verbose(); 42 console_verbose();