From: Ingo Molnar NMIs confuse lockdep, so we work around this problem by disabling NMI sources. The exact reason is not fully understood yet, but suspicion is on irq-disabling done within NMI handlers and this confusing the irq-flags tracing code - and hence confusing lockdep too. Another potential problem could be the entry.S return code for NMIs - if that doesnt trace irq flags correctly then that too could break lockdep. This issue is under investigation. Signed-off-by: Ingo Molnar Cc: Arjan van de Ven Signed-off-by: Andrew Morton --- arch/i386/kernel/nmi.c | 10 ++++++++++ 1 file changed, 10 insertions(+) diff -puN arch/i386/kernel/nmi.c~lock-validator-disable-nmi-watchdog-if-config_lockdep-i386 arch/i386/kernel/nmi.c --- devel/arch/i386/kernel/nmi.c~lock-validator-disable-nmi-watchdog-if-config_lockdep-i386 2006-06-07 08:36:29.000000000 -0700 +++ devel-akpm/arch/i386/kernel/nmi.c 2006-06-07 08:36:58.000000000 -0700 @@ -747,6 +747,16 @@ void setup_apic_nmi_watchdog (void *unus { struct nmi_watchdog_ctlblk *wd = &__get_cpu_var(nmi_watchdog_ctlblk); +#ifdef CONFIG_LOCKDEP + /* + * The NMI watchdog uses spinlocks (notifier chains, etc.), + * so it's not lockdep-safe: + */ + nmi_watchdog = NMI_NONE; + printk("lockdep: disabled NMI watchdog.\n"); + + return; +#endif /* only support LOCAL and IO APICs for now */ if ((nmi_watchdog != NMI_LOCAL_APIC) && (nmi_watchdog != NMI_IO_APIC)) _