[PATCH] i386: Enable NMI watchdog by default

I've had good experiences with having this on by default on x86-64.
It turns nasty hangs into easier to debug oopses.

Enable the local APIC wdog by default for systems newer than 2004.

This comes from a strange compromise: according to arjan the reason
it was off by default was some old IBM systems that corrupted
registered when NMI happened in SMI. Can't remember more specific,
but >= 2004 should avoid these. It's probably overly broad
because most older systems should be ok (and the really old systems
won't be supported by the local apic watchdog anyways)

Signed-off-by: Andi Kleen <ak@suse.de>
This commit is contained in:
Andi Kleen 2006-09-26 10:52:27 +02:00 committed by Andi Kleen
parent 260d6790b6
commit 1de84979df
1 changed files with 9 additions and 0 deletions

View File

@ -21,6 +21,7 @@
#include <linux/sysdev.h> #include <linux/sysdev.h>
#include <linux/sysctl.h> #include <linux/sysctl.h>
#include <linux/percpu.h> #include <linux/percpu.h>
#include <linux/dmi.h>
#include <asm/smp.h> #include <asm/smp.h>
#include <asm/nmi.h> #include <asm/nmi.h>
@ -204,6 +205,14 @@ static int __init check_nmi_watchdog(void)
unsigned int *prev_nmi_count; unsigned int *prev_nmi_count;
int cpu; int cpu;
/* Enable NMI watchdog for newer systems.
Actually it should be safe for most systems before 2004 too except
for some IBM systems that corrupt registers when NMI happens
during SMM. Unfortunately we don't have more exact information
on these and use this coarse check. */
if (nmi_watchdog == NMI_DEFAULT && dmi_get_year(DMI_BIOS_DATE) >= 2004)
nmi_watchdog = NMI_LOCAL_APIC;
if ((nmi_watchdog == NMI_NONE) || (nmi_watchdog == NMI_DEFAULT)) if ((nmi_watchdog == NMI_NONE) || (nmi_watchdog == NMI_DEFAULT))
return 0; return 0;