Re: [PATCH], issue EOI to APIC prior to calling crash_kexec in die_nmi path

Neil Horman
2008-02-08T17:29:26Z

On Fri, Feb 08, 2008 at 11:45:44AM -0500, Vivek Goyal wrote:
> On Fri, Feb 08, 2008 at 11:14:22AM -0500, Neil Horman wrote:
> > On Thu, Feb 07, 2008 at 01:24:04PM +0100, Ingo Molnar wrote:
> > >
> > > * Neil Horman <nhorman@tuxdriver.com> wrote:
> > >
> > > > Ingo noted a few posts down the nmi_exit doesn't actually write to the
> > > > APIC EOI register, so yeah, I agree, its bogus (and I apologize, I
> > > > should have checked that more carefully). Nevertheless, this patch
> > > > consistently allowed a hangning machine to boot through an Nmi lockup.
> > > > So I'm forced to wonder whats going on then that this patch helps
> > > > with. perhaps its a just a very fragile timing issue, I'll need to
> > > > look more closely.
> > >
> > > try a dummy iret, something like:
> > >
> > > asm volatile ("pushf; push $1f; iret; 1: \n");
> > >
> > > to get the CPU out of its 'nested NMI' state. (totally untested)
> > >
> > > the idea is to push down an iret frame to the kernel stack that will
> > > just jump to the next instruction and gets it out of the NMI nesting.
> > > Note: interrupts will/must still be disabled, despite the iret. (the
> > > ordering of the pushes might be wrong, we might need more than that for
> > > a valid iret, etc. etc.)
> > >
> > > Ingo
> >
> > Just tried this experiment and it met with success. Executing a dummy iret
> > instruction got us to boot the kdump kernel successfully.
> >
>
> Interesting. So that means there is some operation we can't perform when
> we are in NMI handler (Or nested NMIs, I don't know if this is nested NMI
> case ).
>
> Even if we initiated crash dump in NMI handler, next kernel should unlock
> that state as soon as we enable interrupts in next kernel (iret will be
> called).
>
> So the only issue here will be if need to put the explicit logic to unlock
> the NMI earlier (Either in crashing kernel after clearing IDT or in
> purgatory code). Anything earlier then that, will be dangerous though, handling
> another NMI while we are already crashed and doing final preparations to jump
> to the new kernel.
>
> Neil, is it possible to do some serial console debugging to find out
> where exactly we are hanging? Beats me, what's that operation which can
> not be executed while being in NMI handler and makes system to hang. I am
> also curious to know if it is nested NMI case.
>
I can try, but my last attempts to do so fuond me hung in various places in
purgatory or very early in head.S. I'll try again though, to see if I can get
some consistency.

Neil

> Thanks
> Vivek
>
> _______________________________________________
> kexec mailing list
> kexec@lists.infradead.org
> http://lists.infradead.org/mailman/listinfo/kexec

--
/***************************************************
*Neil Horman
*Software Engineer
*Red Hat, Inc.
*nhorman@redhat.com
*gpg keyid: 1024D / 0x92A74FA1
*http://pgp.mit.edu
***************************************************/