Messages in this thread | | | Date | Thu, 15 Jul 2010 15:26:51 -0700 | Subject | Re: [patch 1/2] x86_64 page fault NMI-safe | From | Linus Torvalds <> |
| |
On Thu, Jul 15, 2010 at 3:16 PM, Linus Torvalds <torvalds@linux-foundation.org> wrote: > > Then you could in fact possibly test the stack pointer for whether it > is in the NMI stack area, and use the value of %rsp itself as the > flag. So you could avoid the flag entirely. Because testing %rsp is > valid - testing %rip is not. > > That would also avoid the race, because %rsp (as a flag) now gets > cleared atomically by the "iret". So that might actually solve things.
Hmm. So on x86-32, it's easy: if the NMI is nested, you can literally look at the current %rsp value, and see if it's within the NMI stack region.
But on x86-64, due to IST, you need to look at the saved-rsp value on the stack, since the %rsp always gets reset to the NMI stack region regardless of where it was before.
Why do we force IST use for NMI, btw? Maybe we shouldn't, and just use the normal kernel stack mechanisms?
Linus
| |