On Thu, 2018-04-26 at 10:19:02 UTC, Michael Ellerman wrote:
> From: Nicholas Piggin <npig...@gmail.com>
> 
> The NMI IPI handler for a receiving CPU increments nmi_ipi_busy_count
> over the handler function call, which causes later smp_send_nmi_ipi()
> callers to spin until the call is finished.
> 
> The stop_this_cpu() function never returns, so the busy count is never
> decremeted, which can cause the system to hang in some cases. For
> example panic() will call smp_send_stop() early on which calls
> stop_this_cpu() on other CPUs, then later in the reboot path,
> pnv_restart() will call smp_send_stop() again, which hangs.
> 
> Fix this by adding a special case to the stop_this_cpu() handler to
> decrement the busy count, because it will never return.
> 
> Now that the NMI/non-NMI versions of stop_this_cpu() are different,
> split them out into separate functions rather than doing #ifdef tricks
> to share the body between the two functions.
> 
> Fixes: 6bed3237624e3 ("powerpc: use NMI IPI for smp_send_stop")
> Reported-by: Abdul Haleem <abdha...@linux.vnet.ibm.com>
> Signed-off-by: Nicholas Piggin <npig...@gmail.com>
> [mpe: Split out the functions, tweak change log a bit]
> Signed-off-by: Michael Ellerman <m...@ellerman.id.au>

Applied to powerpc fixes.

https://git.kernel.org/powerpc/c/ac61c1156623455c46701654abd8c9

cheers

Reply via email to