diff options
-rw-r--r-- | Documentation/x86_64/boot-options.txt | 3 | ||||
-rw-r--r-- | arch/x86_64/kernel/io_apic.c | 11 |
2 files changed, 13 insertions, 1 deletions
diff --git a/Documentation/x86_64/boot-options.txt b/Documentation/x86_64/boot-options.txt index 44b6eea60ece..b9e6be00cadf 100644 --- a/Documentation/x86_64/boot-options.txt +++ b/Documentation/x86_64/boot-options.txt | |||
@@ -25,6 +25,9 @@ APICs | |||
25 | 25 | ||
26 | noapictimer Don't set up the APIC timer | 26 | noapictimer Don't set up the APIC timer |
27 | 27 | ||
28 | no_timer_check Don't check the IO-APIC timer. This can work around | ||
29 | problems with incorrect timer initialization on some boards. | ||
30 | |||
28 | Early Console | 31 | Early Console |
29 | 32 | ||
30 | syntax: earlyprintk=vga | 33 | syntax: earlyprintk=vga |
diff --git a/arch/x86_64/kernel/io_apic.c b/arch/x86_64/kernel/io_apic.c index ac7684324954..80e9b498c443 100644 --- a/arch/x86_64/kernel/io_apic.c +++ b/arch/x86_64/kernel/io_apic.c | |||
@@ -42,6 +42,8 @@ | |||
42 | 42 | ||
43 | int sis_apic_bug; /* not actually supported, dummy for compile */ | 43 | int sis_apic_bug; /* not actually supported, dummy for compile */ |
44 | 44 | ||
45 | static int no_timer_check; | ||
46 | |||
45 | static DEFINE_SPINLOCK(ioapic_lock); | 47 | static DEFINE_SPINLOCK(ioapic_lock); |
46 | 48 | ||
47 | /* | 49 | /* |
@@ -1601,7 +1603,7 @@ static inline void check_timer(void) | |||
1601 | * Ok, does IRQ0 through the IOAPIC work? | 1603 | * Ok, does IRQ0 through the IOAPIC work? |
1602 | */ | 1604 | */ |
1603 | unmask_IO_APIC_irq(0); | 1605 | unmask_IO_APIC_irq(0); |
1604 | if (timer_irq_works()) { | 1606 | if (!no_timer_check && timer_irq_works()) { |
1605 | nmi_watchdog_default(); | 1607 | nmi_watchdog_default(); |
1606 | if (nmi_watchdog == NMI_IO_APIC) { | 1608 | if (nmi_watchdog == NMI_IO_APIC) { |
1607 | disable_8259A_irq(0); | 1609 | disable_8259A_irq(0); |
@@ -1671,6 +1673,13 @@ static inline void check_timer(void) | |||
1671 | panic("IO-APIC + timer doesn't work! Try using the 'noapic' kernel parameter\n"); | 1673 | panic("IO-APIC + timer doesn't work! Try using the 'noapic' kernel parameter\n"); |
1672 | } | 1674 | } |
1673 | 1675 | ||
1676 | static int __init notimercheck(char *s) | ||
1677 | { | ||
1678 | no_timer_check = 1; | ||
1679 | return 1; | ||
1680 | } | ||
1681 | __setup("no_timer_check", notimercheck); | ||
1682 | |||
1674 | /* | 1683 | /* |
1675 | * | 1684 | * |
1676 | * IRQ's that are handled by the PIC in the MPS IOAPIC case. | 1685 | * IRQ's that are handled by the PIC in the MPS IOAPIC case. |