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