Merge branch 'core-fixes-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/linux-2.6-tip

* 'core-fixes-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/linux-2.6-tip:
  lockdep: continue lock debugging despite some taints
  lockdep: warn about lockdep disabling after kernel taint
This commit is contained in:
Linus Torvalds 2009-04-13 11:30:26 -07:00
commit bf20753c0c
3 changed files with 18 additions and 3 deletions

View File

@ -2,12 +2,19 @@
#define __LINUX_DEBUG_LOCKING_H
#include <linux/kernel.h>
#include <asm/atomic.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:
*/

View File

@ -213,8 +213,16 @@ unsigned long get_taint(void)
void add_taint(unsigned flag)
{
/* can't trust the integrity of the kernel anymore: */
debug_locks = 0;
/*
* 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 development and
* post-warning case.
*/
if (flag != TAINT_CRAP && flag != TAINT_WARN && __debug_locks_off())
printk(KERN_WARNING "Disabling lockdep due to kernel taint\n");
set_bit(flag, &tainted_mask);
}
EXPORT_SYMBOL(add_taint);

View File

@ -36,7 +36,7 @@ int debug_locks_silent;
*/
int debug_locks_off(void)
{
if (xchg(&debug_locks, 0)) {
if (__debug_locks_off()) {
if (!debug_locks_silent) {
oops_in_progress = 1;
console_verbose();