Commit d8fcce3f authored by Ingo Molnar's avatar Ingo Molnar Committed by Linus Torvalds

[PATCH] NMI watchdog SMP fix

This makes NMIs work - otherwise they go to CPU 0 only and any hard
lockup on the other CPUs will not be detected by the nmi_watchdog.
parent d038b8c5
...@@ -1490,7 +1490,7 @@ static struct hw_interrupt_type lapic_irq_type = { ...@@ -1490,7 +1490,7 @@ static struct hw_interrupt_type lapic_irq_type = {
end_lapic_irq end_lapic_irq
}; };
static void enable_NMI_through_LVT0 (void * dummy) void enable_NMI_through_LVT0 (void * dummy)
{ {
unsigned int v, ver; unsigned int v, ver;
......
...@@ -445,6 +445,11 @@ int __init start_secondary(void *unused) ...@@ -445,6 +445,11 @@ int __init start_secondary(void *unused)
while (!test_bit(smp_processor_id(), &smp_commenced_mask)) while (!test_bit(smp_processor_id(), &smp_commenced_mask))
rep_nop(); rep_nop();
setup_secondary_APIC_clock(); setup_secondary_APIC_clock();
if (nmi_watchdog == NMI_IO_APIC) {
disable_8259A_irq(0);
enable_NMI_through_LVT0(NULL);
enable_8259A_irq(0);
}
enable_APIC_timer(); enable_APIC_timer();
/* /*
* low-memory mappings have been cleared, flush them from * low-memory mappings have been cleared, flush them from
......
...@@ -89,6 +89,7 @@ extern void apic_pm_unregister(struct pm_dev*); ...@@ -89,6 +89,7 @@ extern void apic_pm_unregister(struct pm_dev*);
extern unsigned int apic_timer_irqs [NR_CPUS]; extern unsigned int apic_timer_irqs [NR_CPUS];
extern int check_nmi_watchdog (void); extern int check_nmi_watchdog (void);
extern void enable_NMI_through_LVT0 (void * dummy);
extern unsigned int nmi_watchdog; extern unsigned int nmi_watchdog;
#define NMI_NONE 0 #define NMI_NONE 0
......
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