On Fri, 15 Dec 2017 14:34:03 +1100 Balbir Singh <bsinghar...@gmail.com> wrote:
> On Fri, Dec 15, 2017 at 2:10 PM, Nicholas Piggin <npig...@gmail.com> wrote: > > On Fri, 15 Dec 2017 12:27:40 +1100 > > Balbir Singh <bsinghar...@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(®s); > + crash_ipi_callback(regs); > + /* Does not return */ > + } That looks like it should do the trick. Thanks, Nick