[PATCH 2/2] lockdep: choose to continue lock debugging despite taint

Frederic Weisbecker
2009-04-09T21:28:29Z

Lockdep is disabled after any kernel taints. This might be convenient
to ignore bad locking issues which sources come from outside the kernel
tree. Nevertheless, it might be a frustrating experience for the
staging developers or anyone who might develop a kernel that happens
to be tainted.

Just provide an option to let one choose to continue lock-debugging
after any taint.

Signed-off-by: Frederic Weisbecker <fweisbec@gmail.com>

diff --git a/kernel/panic.c b/kernel/panic.c
index 9e7420a..eadc0b5 100644
--- a/kernel/panic.c
+++ b/kernel/panic.c
@@ -213,6 +213,7 @@ unsigned long get_taint(void)

void add_taint(unsigned flag)
{
+#ifndef CONFIG_LOCKDEP_IGNORE_TAINT
/*
* Can't trust the integrity of the kernel anymore.
* We don't call directly debug_locks_off() because the issue
@@ -220,6 +221,7 @@ void add_taint(unsigned flag)
*/
if (xchg(&debug_locks, 0))
printk(KERN_WARNING "Disabling lockdep due to kernel taint\n");
+#endif

set_bit(flag, &tainted_mask);
}
diff --git a/lib/Kconfig.debug b/lib/Kconfig.debug
index c6e854f..599888b 100644
--- a/lib/Kconfig.debug
+++ b/lib/Kconfig.debug
@@ -436,6 +436,20 @@ config PROVE_LOCKING

For more details, see Documentation/lockdep-design.txt.

+config LOCKDEP_IGNORE_TAINT
+ bool "Lock debugging: continue despite taints"
+ depends on LOCKDEP
+ default n
+ help
+ If your kernel becomes tainted because of a warning,
+ a staging or proprietary module loaded, etc... lockdep
+ will be disabled by default. Select this option if you
+ want lockdep to continue running despite a taint. If
+ you are working on a staging driver, experiencing
+ warnings but focusing on something else, or whatever
+ reason that makes you developing on a kernel that is
+ tainted, you might want to say Y here.
+
config LOCKDEP
bool
depends on DEBUG_KERNEL && TRACE_IRQFLAGS_SUPPORT && STACKTRACE_SUPPORT && LOCKDEP_SUPPORT
--
1.6.1