• Corey Minyard's avatar
    [PATCH] x86_64: add nmi_exit to die_nmi · 8b1ffe95
    Corey Minyard authored
    Playing with NMI watchdog on x86_64, I discovered that it didn't
    do what I expected.  It always panic-ed, even when it didn't
    happen from interrupt context.  This patch solves that
    problem for me.  Also, in this case, do_exit() will be called
    with interrupts disabled, I believe.  Would it be wise to also
    call local_irq_enable() after nmi_exit()?
    [Yes I added it -AK]
    
    Currently, on x86_64, any NMI watchdog timeout will cause a panic
    because the irq count will always be set to be in an interrupt
    when do_exit() is called from die_nmi().  If we add nmi_exit() to
    the die_nmi() call (since the nmi will never exit "normally")
    it seems to solve this problem.  The following small program
    can be used to trigger the NMI watchdog to reproduce this:
      main ()
      {
            iopl(3);
            for (;;) asm("cli");
      }
    Signed-off-by: default avatarAndi Kleen <ak@suse.de>
    Signed-off-by: default avatarLinus Torvalds <torvalds@osdl.org>
    8b1ffe95
traps.c 25 KB