diff options
-rw-r--r-- | Documentation/kernel-parameters.txt | 4 | ||||
-rw-r--r-- | arch/x86/kernel/smp.c | 13 |
2 files changed, 17 insertions, 0 deletions
diff --git a/Documentation/kernel-parameters.txt b/Documentation/kernel-parameters.txt index a0c5c5f4fce6..b4339e5a50da 100644 --- a/Documentation/kernel-parameters.txt +++ b/Documentation/kernel-parameters.txt | |||
@@ -1796,6 +1796,10 @@ bytes respectively. Such letter suffixes can also be entirely omitted. | |||
1796 | nomfgpt [X86-32] Disable Multi-Function General Purpose | 1796 | nomfgpt [X86-32] Disable Multi-Function General Purpose |
1797 | Timer usage (for AMD Geode machines). | 1797 | Timer usage (for AMD Geode machines). |
1798 | 1798 | ||
1799 | nonmi_ipi [X86] Disable using NMI IPIs during panic/reboot to | ||
1800 | shutdown the other cpus. Instead use the REBOOT_VECTOR | ||
1801 | irq. | ||
1802 | |||
1799 | nopat [X86] Disable PAT (page attribute table extension of | 1803 | nopat [X86] Disable PAT (page attribute table extension of |
1800 | pagetables) support. | 1804 | pagetables) support. |
1801 | 1805 | ||
diff --git a/arch/x86/kernel/smp.c b/arch/x86/kernel/smp.c index e72b1754a2d7..113acda5879e 100644 --- a/arch/x86/kernel/smp.c +++ b/arch/x86/kernel/smp.c | |||
@@ -249,6 +249,11 @@ static void native_irq_stop_other_cpus(int wait) | |||
249 | local_irq_restore(flags); | 249 | local_irq_restore(flags); |
250 | } | 250 | } |
251 | 251 | ||
252 | static void native_smp_disable_nmi_ipi(void) | ||
253 | { | ||
254 | smp_ops.stop_other_cpus = native_irq_stop_other_cpus; | ||
255 | } | ||
256 | |||
252 | /* | 257 | /* |
253 | * Reschedule call back. | 258 | * Reschedule call back. |
254 | */ | 259 | */ |
@@ -280,6 +285,14 @@ void smp_call_function_single_interrupt(struct pt_regs *regs) | |||
280 | irq_exit(); | 285 | irq_exit(); |
281 | } | 286 | } |
282 | 287 | ||
288 | static int __init nonmi_ipi_setup(char *str) | ||
289 | { | ||
290 | native_smp_disable_nmi_ipi(); | ||
291 | return 1; | ||
292 | } | ||
293 | |||
294 | __setup("nonmi_ipi", nonmi_ipi_setup); | ||
295 | |||
283 | struct smp_ops smp_ops = { | 296 | struct smp_ops smp_ops = { |
284 | .smp_prepare_boot_cpu = native_smp_prepare_boot_cpu, | 297 | .smp_prepare_boot_cpu = native_smp_prepare_boot_cpu, |
285 | .smp_prepare_cpus = native_smp_prepare_cpus, | 298 | .smp_prepare_cpus = native_smp_prepare_cpus, |