Commit 14d98cad authored by Andi Kleen's avatar Andi Kleen Committed by Linus Torvalds

[PATCH] x86_64: Add option to disable timer check

This works around the too fast timer seen on some ATI boards.

I don't feel confident enough about it yet to enable it by default, but give
users the option.

Patch and debugging from Christopher Allen Wing <wingc@engin.umich.edu>, with
minor tweaks (renamed the option and documented it)
Signed-off-by: default avatarAndi Kleen <ak@suse.de>
Signed-off-by: default avatarAndrew Morton <akpm@osdl.org>
Signed-off-by: default avatarLinus Torvalds <torvalds@osdl.org>
parent 607a1685
...@@ -25,6 +25,9 @@ APICs ...@@ -25,6 +25,9 @@ APICs
noapictimer Don't set up the APIC timer noapictimer Don't set up the APIC timer
no_timer_check Don't check the IO-APIC timer. This can work around
problems with incorrect timer initialization on some boards.
Early Console Early Console
syntax: earlyprintk=vga syntax: earlyprintk=vga
......
...@@ -42,6 +42,8 @@ ...@@ -42,6 +42,8 @@
int sis_apic_bug; /* not actually supported, dummy for compile */ int sis_apic_bug; /* not actually supported, dummy for compile */
static int no_timer_check;
static DEFINE_SPINLOCK(ioapic_lock); static DEFINE_SPINLOCK(ioapic_lock);
/* /*
...@@ -1601,7 +1603,7 @@ static inline void check_timer(void) ...@@ -1601,7 +1603,7 @@ static inline void check_timer(void)
* Ok, does IRQ0 through the IOAPIC work? * Ok, does IRQ0 through the IOAPIC work?
*/ */
unmask_IO_APIC_irq(0); unmask_IO_APIC_irq(0);
if (timer_irq_works()) { if (!no_timer_check && timer_irq_works()) {
nmi_watchdog_default(); nmi_watchdog_default();
if (nmi_watchdog == NMI_IO_APIC) { if (nmi_watchdog == NMI_IO_APIC) {
disable_8259A_irq(0); disable_8259A_irq(0);
...@@ -1671,6 +1673,13 @@ static inline void check_timer(void) ...@@ -1671,6 +1673,13 @@ static inline void check_timer(void)
panic("IO-APIC + timer doesn't work! Try using the 'noapic' kernel parameter\n"); panic("IO-APIC + timer doesn't work! Try using the 'noapic' kernel parameter\n");
} }
static int __init notimercheck(char *s)
{
no_timer_check = 1;
return 1;
}
__setup("no_timer_check", notimercheck);
/* /*
* *
* IRQ's that are handled by the PIC in the MPS IOAPIC case. * IRQ's that are handled by the PIC in the MPS IOAPIC case.
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment