Mailing List Archive

Ensure watchdog remains disabled unless enabled on the command line.
# HG changeset patch
# User Ian.Campbell@xensource.com
# Node ID 956bf08c91c36e6734d9c38d2e481732c976d32b
# Parent 19f5ffa02154db55a4fa5a67201e763d8626868b
Ensure watchdog remains disabled unless enabled on the command line.

Bail out of setup_apic_nmi_watchdog() early if watchdog is not
enabled. Is the watchdog is disabled then increment
watchdog_disable_count to prevent it ever becoming enabled.

Unconditionally call setup_apic_nmi_watchdog() from setup_local_APIC()
so that the above is guaranteed to have occurred before the first call
of watchdog_enable().

Signed-off-by: Ian Campbell <Ian.Campbell@XenSource.com>

diff -r 19f5ffa02154 -r 956bf08c91c3 xen/arch/x86/apic.c
--- a/xen/arch/x86/apic.c Fri Jan 13 11:04:04 2006
+++ b/xen/arch/x86/apic.c Fri Jan 13 14:09:39 2006
@@ -451,8 +451,7 @@
printk("No ESR for 82489DX.\n");
}

- if (nmi_watchdog == NMI_LOCAL_APIC)
- setup_apic_nmi_watchdog();
+ setup_apic_nmi_watchdog();
}

/*
diff -r 19f5ffa02154 -r 956bf08c91c3 xen/arch/x86/nmi.c
--- a/xen/arch/x86/nmi.c Fri Jan 13 11:04:04 2006
+++ b/xen/arch/x86/nmi.c Fri Jan 13 14:09:39 2006
@@ -31,6 +31,10 @@
#include <asm/div64.h>

unsigned int nmi_watchdog = NMI_NONE;
+static spinlock_t watchdog_lock = SPIN_LOCK_UNLOCKED;
+static unsigned int watchdog_disable_count = 1;
+static unsigned int watchdog_on;
+
static unsigned int nmi_hz = HZ;
static unsigned int nmi_perfctr_msr; /* the MSR to reset in NMI handler */
static unsigned int nmi_p4_cccr_val;
@@ -310,8 +314,16 @@
{
int cpu = smp_processor_id();

- if (!nmi_watchdog)
- return;
+ if ( nmi_active < 0 )
+ return;
+
+ if ( !nmi_watchdog )
+ {
+ /* Force the watchdog to always be disabled. */
+ watchdog_disable_count++;
+ nmi_active = -1;
+ return;
+ }

switch (boot_cpu_data.x86_vendor) {
case X86_VENDOR_AMD:
@@ -351,10 +363,6 @@
static unsigned int
last_irq_sums [NR_CPUS],
alert_counter [NR_CPUS];
-
-static spinlock_t watchdog_lock = SPIN_LOCK_UNLOCKED;
-static unsigned int watchdog_disable_count = 1;
-static unsigned int watchdog_on;

void watchdog_disable(void)
{

_______________________________________________
Xen-changelog mailing list
Xen-changelog@lists.xensource.com
http://lists.xensource.com/xen-changelog