RE: Sending cpu 0 back to SAL slave loop

Zou, Nanhai
2006-10-08T05:40:41Z

> -----Original Message-----
> From: Jack Steiner [mailto:steiner@sgi.com]
> Sent: 2006Äê10ÔÂ7ÈÕ 10:17
> To: Matthew Wilcox
> Cc: Zou, Nanhai; Jay Lan; Luck, Tony; Linux-IA64; fastboot; Eric W. Biederman
> Subject: Re: Sending cpu 0 back to SAL slave loop
>
> On Fri, Oct 06, 2006 at 02:44:43PM -0600, Matthew Wilcox wrote:
> > On Fri, Oct 06, 2006 at 03:39:10PM -0500, Jack Steiner wrote:
> > > For kexec, it is ESSENTIAL that all cpus except for the one doing
> > > the kexec be returned to the SAL slave loop. If this is not done, our
> > > chipset will misdirect IO interrupts on the newly exec'ed kernel.
> >
> > Could you do an IPI call to have CPU 0 do the kexec and have the CPU
> > that sent the IPI fall into the SAL slave loop instead?
>
> Yes, that seems ok, too. One endcase that must be covered is the
> case where where 1) cpu >0 panics and, 2) cpu 0 is looping with interrupts
> disabled - perhaps waiting on a lock held by the panic'ing cpu.
> In this case, the panic'ing cpu must send an NMI interrupt to cpu 0
> to cause it to do the kexec. Not sure but I think this can be made to work.
>

This can be done.
Sent an IPI and wait CPU0 to kexec, if CPU0 not response for a certain period of time. Send an OS_INIT to force kexec on CPU0. However I wonder should we implement it with a kernel-parameter, or make it default behavior?

> Hmmmmm. Another case that is more difficult to handle is a failure
> where an MCA has occurred & cpu 0 is in the SAL rendez slave loop.
> Kexec will have to bring cpu out of the rendez slave loop & cause it
> to kexec the new kernel. Is this possible???
>
Not sure, I can have a try on Tiger, but I guess it depends on the how SAL is implementing rendez on each platform.
>
> I like the NMI approach for the general case where you are kexec'ing
> a new kernel - not a crashdump kernel. We have some dependencies on
> the boot cpu not changing.
>
For none crashdumping kexec, I have sched_setaffinity code in kexec-tools->arch_process_options, so kexec -e will only run on CPU 0.

Thanks
Zou Nan hai