From: Paolo Bonzini <pbonzini@redhat.com>
To: "Radim Krčmář" <rkrcmar@redhat.com>
Cc: Yuki Shibuya <shibuya.yk@ncos.nec.co.jp>,
"kvm@vger.kernel.org" <kvm@vger.kernel.org>,
Jan Kiszka <jan.kiszka@siemens.com>,
Nobuo Yoshida <yoshida.nb@ncos.nec.co.jp>
Subject: Re: [PATCH v2] KVM: x86: Inject pending interrupt even if pending nmi exist
Date: Wed, 23 Mar 2016 22:00:59 +0100 [thread overview]
Message-ID: <56F3040B.8070006@redhat.com> (raw)
In-Reply-To: <20160323190406.GB22164@potion.brq.redhat.com>
On 23/03/2016 20:04, Radim Krčmář wrote:
> I think that hardware coalesces all NMIs that arrive within one
> instruction (NMI is delivered at instruction boundaries)
> and one NMI is sufficient anyway (all events that triggered NMIs are
> going to be handled in the first one and the second one is for nothing),
> so reasons behind "supposed to" elude me.
http://www.spinics.net/lists/kvm/msg61313.html provides the relevant
history lesson:
Jan: "Thinking this through again, it's actually not yet clear to me
what we are modeling here: If two NMI events arrive almost perfectly in
parallel, does the real hardware guarantee that they will always cause
two NMI events in the CPU? Then this is required."
Avi: "It's not 100% clear from the SDM, but this is what I understood
from it. And it's needed - the NMI handlers are now being reworked to
handle just one NMI source (hopefully the cheapest) in the handler, and
if we detect a back-to-back NMI, handle all possible NMI sources."
Not sure if that change actually ever happened in Linux (Avi went on
describing an application to pvspinlocks, but pvspinlocks ended up _not_
using NMIs), actually.
The Intel SDM is very obscure, AMD a bit less. It says: "The processor
recognizes an NMI at an instruction boundary. [...] NMI cannot be
masked. However, when an NMI is recognized by the processor, recognition
of subsequent NMIs are disabled until an IRET instruction is executed."
Here recognition means delivery, acceptance need not be at instruction
boundaries (it can be at clock cycle boundary). It might be possible to
figure this out on bare-metal by executing an expensive instruction such
as MFENCE.
There is also at least one case where you could have one pending (but
not injected) and one latched NMI at instruction boundary, and that is
the special NMI shadow from the STI instruction.
Paolo
next prev parent reply other threads:[~2016-03-23 21:01 UTC|newest]
Thread overview: 12+ messages / expand[flat|nested] mbox.gz Atom feed top
2016-03-23 5:08 [PATCH v2] KVM: x86: Inject pending interrupt even if pending nmi exist Yuki Shibuya
2016-03-23 13:18 ` Paolo Bonzini
2016-03-23 17:21 ` Radim Krčmář
2016-03-23 18:22 ` Paolo Bonzini
2016-03-23 19:04 ` Radim Krčmář
2016-03-23 21:00 ` Paolo Bonzini [this message]
2016-03-23 21:06 ` Jan Kiszka
2016-03-23 21:11 ` Paolo Bonzini
2016-03-23 21:55 ` Radim Krčmář
2016-03-24 5:08 ` Yuki Shibuya
2016-03-24 11:09 ` Paolo Bonzini
2016-03-23 21:52 ` Radim Krčmář
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=56F3040B.8070006@redhat.com \
--to=pbonzini@redhat.com \
--cc=jan.kiszka@siemens.com \
--cc=kvm@vger.kernel.org \
--cc=rkrcmar@redhat.com \
--cc=shibuya.yk@ncos.nec.co.jp \
--cc=yoshida.nb@ncos.nec.co.jp \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox