[v3] powerpc: Fix smp_send_stop NMI IPI handling

Michael Ellerman patch-notifications at ellerman.id.au
Thu Apr 26 20:22:44 AEST 2018


On Thu, 2018-04-26 at 10:19:02 UTC, Michael Ellerman wrote:
> From: Nicholas Piggin <npiggin at 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 <abdhalee at linux.vnet.ibm.com>
> Signed-off-by: Nicholas Piggin <npiggin at gmail.com>
> [mpe: Split out the functions, tweak change log a bit]
> Signed-off-by: Michael Ellerman <mpe at ellerman.id.au>

Applied to powerpc fixes.

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

cheers


More information about the Linuxppc-dev mailing list