taint: add explicit flag to show whether lock dep is still OK.
Fix up all callers as they were before, with make one change: an unsigned module taints the kernel, but doesn't turn off lockdep. Signed-off-by: Rusty Russell <rusty@rustcorp.com.au>
This commit is contained in:
@ -259,26 +259,19 @@ unsigned long get_taint(void)
|
||||
return tainted_mask;
|
||||
}
|
||||
|
||||
void add_taint(unsigned flag)
|
||||
/**
|
||||
* add_taint: add a taint flag if not already set.
|
||||
* @flag: one of the TAINT_* constants.
|
||||
* @lockdep_ok: whether lock debugging is still OK.
|
||||
*
|
||||
* If something bad has gone wrong, you'll want @lockdebug_ok = false, but for
|
||||
* some notewortht-but-not-corrupting cases, it can be set to true.
|
||||
*/
|
||||
void add_taint(unsigned flag, enum lockdep_ok lockdep_ok)
|
||||
{
|
||||
/*
|
||||
* Can't trust the integrity of the kernel anymore.
|
||||
* We don't call directly debug_locks_off() because the issue
|
||||
* is not necessarily serious enough to set oops_in_progress to 1
|
||||
* Also we want to keep up lockdep for staging/out-of-tree
|
||||
* development and post-warning case.
|
||||
*/
|
||||
switch (flag) {
|
||||
case TAINT_CRAP:
|
||||
case TAINT_OOT_MODULE:
|
||||
case TAINT_WARN:
|
||||
case TAINT_FIRMWARE_WORKAROUND:
|
||||
break;
|
||||
|
||||
default:
|
||||
if (__debug_locks_off())
|
||||
printk(KERN_WARNING "Disabling lock debugging due to kernel taint\n");
|
||||
}
|
||||
if (lockdep_ok == LOCKDEP_NOW_UNRELIABLE && __debug_locks_off())
|
||||
printk(KERN_WARNING
|
||||
"Disabling lock debugging due to kernel taint\n");
|
||||
|
||||
set_bit(flag, &tainted_mask);
|
||||
}
|
||||
@ -421,7 +414,8 @@ static void warn_slowpath_common(const char *file, int line, void *caller,
|
||||
print_modules();
|
||||
dump_stack();
|
||||
print_oops_end_marker();
|
||||
add_taint(taint);
|
||||
/* Just a warning, don't kill lockdep. */
|
||||
add_taint(taint, LOCKDEP_STILL_OK);
|
||||
}
|
||||
|
||||
void warn_slowpath_fmt(const char *file, int line, const char *fmt, ...)
|
||||
|
Reference in New Issue
Block a user