diff options
| -rw-r--r-- | arch/i386/kernel/crash.c | 7 | ||||
| -rw-r--r-- | arch/i386/kernel/smp.c | 12 | ||||
| -rw-r--r-- | arch/x86_64/kernel/crash.c | 2 | ||||
| -rw-r--r-- | include/asm-i386/hw_irq.h | 2 |
4 files changed, 15 insertions, 8 deletions
diff --git a/arch/i386/kernel/crash.c b/arch/i386/kernel/crash.c index 21dc1bbb8067..0c88d3ec8c18 100644 --- a/arch/i386/kernel/crash.c +++ b/arch/i386/kernel/crash.c | |||
| @@ -120,14 +120,9 @@ static int crash_nmi_callback(struct pt_regs *regs, int cpu) | |||
| 120 | return 1; | 120 | return 1; |
| 121 | } | 121 | } |
| 122 | 122 | ||
| 123 | /* | ||
| 124 | * By using the NMI code instead of a vector we just sneak thru the | ||
| 125 | * word generator coming out with just what we want. AND it does | ||
| 126 | * not matter if clustered_apic_mode is set or not. | ||
| 127 | */ | ||
| 128 | static void smp_send_nmi_allbutself(void) | 123 | static void smp_send_nmi_allbutself(void) |
| 129 | { | 124 | { |
| 130 | send_IPI_allbutself(APIC_DM_NMI); | 125 | send_IPI_allbutself(NMI_VECTOR); |
| 131 | } | 126 | } |
| 132 | 127 | ||
| 133 | static void nmi_shootdown_cpus(void) | 128 | static void nmi_shootdown_cpus(void) |
diff --git a/arch/i386/kernel/smp.c b/arch/i386/kernel/smp.c index d134e9643a58..c10789d7a9d3 100644 --- a/arch/i386/kernel/smp.c +++ b/arch/i386/kernel/smp.c | |||
| @@ -114,7 +114,17 @@ DEFINE_PER_CPU(struct tlb_state, cpu_tlbstate) ____cacheline_aligned = { &init_m | |||
| 114 | 114 | ||
| 115 | static inline int __prepare_ICR (unsigned int shortcut, int vector) | 115 | static inline int __prepare_ICR (unsigned int shortcut, int vector) |
| 116 | { | 116 | { |
| 117 | return APIC_DM_FIXED | shortcut | vector | APIC_DEST_LOGICAL; | 117 | unsigned int icr = shortcut | APIC_DEST_LOGICAL; |
| 118 | |||
| 119 | switch (vector) { | ||
| 120 | default: | ||
| 121 | icr |= APIC_DM_FIXED | vector; | ||
| 122 | break; | ||
| 123 | case NMI_VECTOR: | ||
| 124 | icr |= APIC_DM_NMI; | ||
| 125 | break; | ||
| 126 | } | ||
| 127 | return icr; | ||
| 118 | } | 128 | } |
| 119 | 129 | ||
| 120 | static inline int __prepare_ICR2 (unsigned int mask) | 130 | static inline int __prepare_ICR2 (unsigned int mask) |
diff --git a/arch/x86_64/kernel/crash.c b/arch/x86_64/kernel/crash.c index ec1c7431d5af..8ca04912b1cc 100644 --- a/arch/x86_64/kernel/crash.c +++ b/arch/x86_64/kernel/crash.c | |||
| @@ -118,7 +118,7 @@ static int crash_nmi_callback(struct pt_regs *regs, int cpu) | |||
| 118 | 118 | ||
| 119 | static void smp_send_nmi_allbutself(void) | 119 | static void smp_send_nmi_allbutself(void) |
| 120 | { | 120 | { |
| 121 | send_IPI_allbutself(APIC_DM_NMI); | 121 | send_IPI_allbutself(NMI_VECTOR); |
| 122 | } | 122 | } |
| 123 | 123 | ||
| 124 | /* | 124 | /* |
diff --git a/include/asm-i386/hw_irq.h b/include/asm-i386/hw_irq.h index 95d3fd090298..a4c0a5a9ffd8 100644 --- a/include/asm-i386/hw_irq.h +++ b/include/asm-i386/hw_irq.h | |||
| @@ -19,6 +19,8 @@ | |||
| 19 | 19 | ||
| 20 | struct hw_interrupt_type; | 20 | struct hw_interrupt_type; |
| 21 | 21 | ||
| 22 | #define NMI_VECTOR 0x02 | ||
| 23 | |||
| 22 | /* | 24 | /* |
| 23 | * Various low-level irq details needed by irq.c, process.c, | 25 | * Various low-level irq details needed by irq.c, process.c, |
| 24 | * time.c, io_apic.c and smp.c | 26 | * time.c, io_apic.c and smp.c |
