[PATCH v3 3/3] powernv/kdump: Fix cases where the kdump kernel can get HMI's

Nicholas Piggin npiggin at gmail.com
Fri Dec 15 15:47:33 AEDT 2017


On Fri, 15 Dec 2017 14:34:03 +1100
Balbir Singh <bsingharora at gmail.com> wrote:

> On Fri, Dec 15, 2017 at 2:10 PM, Nicholas Piggin <npiggin at gmail.com> wrote:
> > On Fri, 15 Dec 2017 12:27:40 +1100
> > Balbir Singh <bsingharora at gmail.com> wrote:

> > But then you still need an explicit kdump check for non-sreset wakeups
> > because the platform may not implement sreset, or it may fall back to
> > normal IPI if the sreset scom fails. So you then still need your
> >
> > if (kdump) crash_ipi_callback  
> 
> Yep, its required for the the non NMI case.
> 
> 
> How does this look -- based on your comment
> 
> +               } else if ((srr1 & wmask) == SRR1_WAKESRESET) {
> +                       irq_set_pending_from_srr1(srr1);
> +                       /* Does not return */
>                 }
> +
>                 smp_mb();
> 
>                 /*
>                  * For kdump kernels, we process the ipi and jump to
> -                * handling the system reset exception.
> +                * crash_ipi_callback
>                  */
> -               if (kdump_in_progress())
> -                       irq_set_pending_from_srr1(srr1);
> +               if (kdump_in_progress()) {
> +                       /*
> +                        * If we got to this point, we've not used
> +                        * NMI's, otherwise we would have gone
> +                        * via the SRR1_WAKESRESET path. We are
> +                        * using regular IPI's for waking up offline
> +                        * threads.
> +                        */
> +                       struct pt_regs regs;
> +
> +                       ppc_save_regs(&regs);
> +                       crash_ipi_callback(regs);
> +                       /* Does not return */
> +               }

That looks like it should do the trick.

Thanks,
Nick


More information about the Linuxppc-dev mailing list