On Sat, Mar 19, 2011 at 11:44:33PM +0530, Kamalesh Babulal wrote:
>       powerpc/kdump: Fix race in kdump shutdown
> 
>       Commit: 60adec6226bbcf061d4c2d10944fced209d1847d upstream
> 
>       When we are crashing, the crashing/primary CPU IPIs the secondaries to
>       turn off IRQs, go into real mode and wait in kexec_wait.  While this
>       is happening, the primary tears down all the MMU maps.  Unfortunately
>       the primary doesn't check to make sure the secondaries have entered
>       real mode before doing this.
> 
>       On PHYP machines, the secondaries can take a long time shutting down
>       the IRQ controller as RTAS calls are need.  These RTAS calls need to
>       be serialised which resilts in the secondaries contending in
>       lock_rtas() and hence taking a long time to shut down.
> 
>       We've hit this on large POWER7 machines, where some secondaries are
>       still waiting in lock_rtas(), when the primary tears down the HPTEs.
> 
>       This patch makes sure all secondaries are in real mode before the
>       primary tears down the MMU.  It uses the new kexec_state entry in the
>       paca.  It times out if the secondaries don't reach real mode after
>       10sec.
> 
>       Signed-off-by: Michael Neuling <[email protected]>
>       Signed-off-by: Benjamin Herrenschmidt <[email protected]>
>       Signed-off-by: Kamalesh Babulal <[email protected]>
>       cc: Anton Blanchard <[email protected]>

Please don't indent these, I have to unindent them for every patch I
apply from you, which is a pain.


> ---
>  arch/powerpc/kernel/crash.c |   28 ++++++++++++++++++++++++++++
>  1 files changed, 28 insertions(+), 0 deletions(-)
> 
> diff --git a/arch/powerpc/kernel/crash.c b/arch/powerpc/kernel/crash.c
> index b779818..706b622 100644
> --- a/arch/powerpc/kernel/crash.c
> +++ b/arch/powerpc/kernel/crash.c
> @@ -153,6 +153,7 @@ static void crash_kexec_prepare_cpus(int cpu)
>               while (cpus_weight(cpus_in_crash) < ncpus)
>                       cpu_relax();
>       }
> +
>       /*
>        * Make sure all CPUs are entered via soft-reset if the kdump is
>        * invoked using soft-reset.

That chunk is not in the upstream commit.  Please be more careful.

greg k-h

_______________________________________________
stable mailing list
[email protected]
http://linux.kernel.org/mailman/listinfo/stable

Reply via email to