提交 ea925a72 编写于 作者: A Andrew Bresticker 提交者: Ralf Baechle

MIPS: smp: Make stop_this_cpu() actually stop the CPU

Since cpu_wait() enables interrupts upon return, CPUs which have
entered stop_this_cpu() may still end up handling interrupts.
This can lead to the softlockup detector firing on a panic or
restart/poweroff/halt.  Just disable interrupts and spin to ensure
nothing else runs on the CPU once it has entered stop_this_cpu().
Signed-off-by: NAndrew Bresticker <abrestic@chromium.org>
Cc: James Hogan <james.hogan@imgtec.com>
Cc: Maciej W. Rozycki <macro@linux-mips.org>
Cc: linux-mips@linux-mips.org
Cc: linux-kernel@vger.kernel.org
Patchwork: https://patchwork.linux-mips.org/patch/9601/Signed-off-by: NRalf Baechle <ralf@linux-mips.org>
上级 c1bed31f
...@@ -176,10 +176,8 @@ static void stop_this_cpu(void *dummy) ...@@ -176,10 +176,8 @@ static void stop_this_cpu(void *dummy)
* Remove this CPU: * Remove this CPU:
*/ */
set_cpu_online(smp_processor_id(), false); set_cpu_online(smp_processor_id(), false);
for (;;) { local_irq_disable();
if (cpu_wait) while (1);
(*cpu_wait)(); /* Wait if available. */
}
} }
void smp_send_stop(void) void smp_send_stop(void)
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册