Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit bda62633 authored by Don Zickus's avatar Don Zickus Committed by Ingo Molnar
Browse files

x86, NMI: Add knob to disable using NMI IPIs to stop cpus



Some machines may exhibit problems using the NMI to stop other
cpus. This knob just allows one to revert back to the original
behaviour to help diagnose the problem.

V2:
  make function static

Signed-off-by: default avatarDon Zickus <dzickus@redhat.com>
Cc: Linus Torvalds <torvalds@linux-foundation.org>
Cc: Peter Zijlstra <peterz@infradead.org>
Cc: Robert Richter <robert.richter@amd.com>
Cc: seiji.aguchi@hds.com
Cc: vgoyal@redhat.com
Cc: mjg@redhat.com
Cc: tony.luck@intel.com
Cc: gong.chen@intel.com
Cc: satoru.moriya@hds.com
Cc: avi@redhat.com
Cc: Andi Kleen <andi@firstfloor.org>
Link: http://lkml.kernel.org/r/1318533267-18880-4-git-send-email-dzickus@redhat.com


Signed-off-by: default avatarIngo Molnar <mingo@elte.hu>
parent 99e8b9ca
Loading
Loading
Loading
Loading
+4 −0
Original line number Diff line number Diff line
@@ -1796,6 +1796,10 @@ bytes respectively. Such letter suffixes can also be entirely omitted.
	nomfgpt		[X86-32] Disable Multi-Function General Purpose
			Timer usage (for AMD Geode machines).

	nonmi_ipi	[X86] Disable using NMI IPIs during panic/reboot to
			shutdown the other cpus.  Instead use the REBOOT_VECTOR
			irq.

	nopat		[X86] Disable PAT (page attribute table extension of
			pagetables) support.

+13 −0
Original line number Diff line number Diff line
@@ -249,6 +249,11 @@ static void native_irq_stop_other_cpus(int wait)
	local_irq_restore(flags);
}

static void native_smp_disable_nmi_ipi(void)
{
	smp_ops.stop_other_cpus = native_irq_stop_other_cpus;
}

/*
 * Reschedule call back.
 */
@@ -280,6 +285,14 @@ void smp_call_function_single_interrupt(struct pt_regs *regs)
	irq_exit();
}

static int __init nonmi_ipi_setup(char *str)
{
        native_smp_disable_nmi_ipi();
        return 1;
}

__setup("nonmi_ipi", nonmi_ipi_setup);

struct smp_ops smp_ops = {
	.smp_prepare_boot_cpu	= native_smp_prepare_boot_cpu,
	.smp_prepare_cpus	= native_smp_prepare_cpus,