Question: Outer NMI can nest if from user mode?

From: Steven Rostedt
Date: Thu Aug 18 2016 - 21:00:59 EST


Hi Andy,

I was reading some of the comments in nmi.c and came across this:

/*
* NMIs can page fault or hit breakpoints which will cause it to lose
* its NMI context with the CPU when the breakpoint or page fault does an IRET.
*
* As a result, NMIs can nest if NMIs get unmasked due an IRET during
* NMI processing. On x86_64, the asm glue protects us from nested NMIs
* if the outer NMI came from kernel mode, but we can still nest if the
* outer NMI came from user mode.


What confuses me is "but we can still nest if the outer NMI came from
user mode".

How can that happen? You mean do_nmi() can be called nested even on
x86_64 if the first NMI happened in user mode?

-- Steve