Re: [PATCH 1/3] x86, reboot: Use NMI instead of REBOOT_VECTOR to stop cpus

Don Zickus
2011-10-12T12:51:55Z

On Wed, Oct 12, 2011 at 10:35:42AM +0800, Chen Gong wrote:
> 于 2011/10/11 23:24, Don Zickus 写道:
> >+
> >+ /* sync above data before sending NMI */
> >+ wmb();
> >+
> >+ apic->send_IPI_allbutself(NMI_VECTOR);
> >+
> >+ /*
> >+ * Don't wait longer than a second if the caller
> >+ * didn't ask us to wait.
> >+ */
> >+ timeout = USEC_PER_SEC;
> >+ while (num_online_cpus()> 1&& (wait || timeout--))
> >+ udelay(1);
>
> In this patch and next patch, how about using the same logic in commit 74d91e3c6

I guess I don't understand why I would do that. That commit doesn't seem
to have a way to break out of the while loop and it does not take into account
the 'wait' variable the virt folks needed. The only thing that could be
usable seems to be the 'touch_nmi_watchdog', but in that case if the other
cpus haven't hit the NMI yet, I would be happy for other NMI sources to
trigger to, to help move things along. :-)

The above code snippet is what is currently there and that seems to work
well, so I didn't want to change to much when moving from the IRQ path to
the NMI path.

Perhaps I am missing something?

Cheers,
Don