mirror of
https://github.com/xen-project/xen.git
synced 2026-10-29 18:50:05 +01:00
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>
This commit is contained in:
1 parent
dd38458519
commit
8ffaf9c238
2 files changed
+15
-8
No files matched your search
+1
-2
@@ -451,8 +451,7 @@ void __init setup_local_APIC (void)
|
||||
printk("No ESR for 82489DX.\n");
|
||||
}
|
||||
|
||||
if (nmi_watchdog == NMI_LOCAL_APIC)
|
||||
setup_apic_nmi_watchdog();
|
||||
setup_apic_nmi_watchdog();
|
||||
}
|
||||
|
||||
/*
|
||||
|
||||
+14
-6
@@ -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 @@ void __pminit setup_apic_nmi_watchdog(void)
|
||||
{
|
||||
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:
|
||||
@@ -352,10 +364,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)
|
||||
{
|
||||
unsigned long flags;
|
||||
|
||||