Re: [PATCH 70/70] x86/sev-es: Add NMI state tracking
From: Andy Lutomirski <luto@kernel.org>
Date: 2020-03-19 21:28:06
Also in:
kvm, lkml
On Thu, Mar 19, 2020 at 12:26 PM Joerg Roedel [off-list ref] wrote:
On Thu, Mar 19, 2020 at 11:40:39AM -0700, Andy Lutomirski wrote:quoted
Nope. A nested NMI will reset the interrupted NMI's return frame to cause it to run again when it's done. I don't think this will have any real interaction with #VC. There's no longjmp() here.Ahh, so I misunderstood that part, in this case your proposal of sending the NMI-complete message right at the beginning of do_nmi() should work just fine. I will test this and see how it works out.quoted
I certainly *like* preventing nesting, but I don't think we really want a whole alternate NMI path just for a couple of messed-up AMD generations. And the TF trick is not so pretty either.Indeed, if it could be avoided, it should.quoted
quoted
quoted
This causes us to pop the NMI frame off the stack. Assuming the NMI restart logic is invoked (which is maybe impossible?), we get #DB, which presumably is actually delivered. And we end up on the #DB stack, which might already have been in use, so we have a potential increase in nesting. Also, #DB may be called from an unexpected context.An SEV-ES hypervisor is required to intercept #DB, which means that the #DB exception actually ends up being a #VC exception. So it will not end up on the #DB stack.With your patch set, #DB doesn't seem to end up on the #DB stack either.Right, it does not use the #DB stack or shift-ist stuff. Maybe it should, is this needed for anything else than making entry code debugable by kgdb?
AIUI the shift-ist stuff is because we aren't very good about the way that we handle tracing right now, and that can cause a limited degree of recursion. #DB uses IST for historical reasons that don't necessarily make sense. Right now, we need it for only one reason: the MOV SS issue. IIRC this isn't actually triggerable without debugging enabled -- MOV SS with no breakpoint but TF on doesn't seem to malfunction quite as badly. --Andy
Regards,
Joerg