Skip to content

Commit

Permalink
Revert "x86: fix NMI watchdog & 'stopped time' problem"
Browse files Browse the repository at this point in the history
This reverts commit d4d25de.

It tried to fix long standing bugzilla entries, but the solution was
reported to break other systems. The reporter of

http://bugzilla.kernel.org/show_bug.cgi?id=9791

tracked it down to this commit and confirmed that reverting the patch
restores the correct behaviour. It's too late in the release cycle to
find a better solution than reverting the commit to avoid regressions.

Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
Acked-by: Ingo Molnar <mingo@elte.hu>
  • Loading branch information
Thomas Gleixner committed Jan 22, 2008
1 parent d384e35 commit 4960c9d
Show file tree
Hide file tree
Showing 2 changed files with 4 additions and 17 deletions.
12 changes: 2 additions & 10 deletions arch/x86/kernel/io_apic_32.c
Original file line number Diff line number Diff line change
Expand Up @@ -2169,14 +2169,10 @@ static inline void __init check_timer(void)
{
int apic1, pin1, apic2, pin2;
int vector;
unsigned int ver;
unsigned long flags;

local_irq_save(flags);

ver = apic_read(APIC_LVR);
ver = GET_APIC_VERSION(ver);

/*
* get/set the timer IRQ vector:
*/
Expand All @@ -2189,15 +2185,11 @@ static inline void __init check_timer(void)
* mode for the 8259A whenever interrupts are routed
* through I/O APICs. Also IRQ0 has to be enabled in
* the 8259A which implies the virtual wire has to be
* disabled in the local APIC. Finally timer interrupts
* need to be acknowledged manually in the 8259A for
* timer_interrupt() and for the i82489DX when using
* the NMI watchdog.
* disabled in the local APIC.
*/
apic_write_around(APIC_LVT0, APIC_LVT_MASKED | APIC_DM_EXTINT);
init_8259A(1);
timer_ack = !cpu_has_tsc;
timer_ack |= (nmi_watchdog == NMI_IO_APIC && !APIC_INTEGRATED(ver));
timer_ack = 1;
if (timer_over_8254 > 0)
enable_8259A_irq(0);

Expand Down
9 changes: 2 additions & 7 deletions arch/x86/kernel/nmi_32.c
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,6 @@

#include <asm/smp.h>
#include <asm/nmi.h>
#include <asm/timer.h>

#include "mach_traps.h"

Expand Down Expand Up @@ -84,7 +83,7 @@ static int __init check_nmi_watchdog(void)

prev_nmi_count = kmalloc(NR_CPUS * sizeof(int), GFP_KERNEL);
if (!prev_nmi_count)
goto error;
return -1;

printk(KERN_INFO "Testing NMI watchdog ... ");

Expand Down Expand Up @@ -119,7 +118,7 @@ static int __init check_nmi_watchdog(void)
if (!atomic_read(&nmi_active)) {
kfree(prev_nmi_count);
atomic_set(&nmi_active, -1);
goto error;
return -1;
}
printk("OK.\n");

Expand All @@ -130,10 +129,6 @@ static int __init check_nmi_watchdog(void)

kfree(prev_nmi_count);
return 0;
error:
timer_ack = !cpu_has_tsc;

return -1;
}
/* This needs to happen later in boot so counters are working */
late_initcall(check_nmi_watchdog);
Expand Down

0 comments on commit 4960c9d

Please sign in to comment.