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

Neil Horman nhorman at redhat.com
Fri Feb 8 12:26:58 EST 2008


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 at 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 at lists.infradead.org
> http://lists.infradead.org/mailman/listinfo/kexec

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



More information about the kexec mailing list