linux-kernel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Jim Mattson <jmattson@google.com>
To: Santosh Shukla <santosh.shukla@amd.com>
Cc: Paolo Bonzini <pbonzini@redhat.com>,
	Sean Christopherson <seanjc@google.com>,
	Vitaly Kuznetsov <vkuznets@redhat.com>,
	Joerg Roedel <joro@8bytes.org>,
	Tom Lendacky <thomas.lendacky@amd.com>,
	kvm@vger.kernel.org, linux-kernel@vger.kernel.org
Subject: Re: [PATCH 0/7] Virtual NMI feature
Date: Mon, 6 Jun 2022 16:01:35 -0700	[thread overview]
Message-ID: <CALMp9eTh9aZ_Ps0HehAuNfZqYmCS72RKyfAP3Pe_u08N9F8ZLw@mail.gmail.com> (raw)
In-Reply-To: <20220602142620.3196-1-santosh.shukla@amd.com>

On Thu, Jun 2, 2022 at 7:26 AM Santosh Shukla <santosh.shukla@amd.com> wrote:
>
> Currently, NMI is delivered to the guest using the Event Injection
> mechanism [1]. The Event Injection mechanism does not block the delivery
> of subsequent NMIs. So the Hypervisor needs to track the NMI delivery
> and its completion(by intercepting IRET) before sending a new NMI.
>
> Virtual NMI (VNMI) allows the hypervisor to inject the NMI into the guest
> w/o using Event Injection mechanism meaning not required to track the
> guest NMI and intercepting the IRET. To achieve that,
> VNMI feature provides virtualized NMI and NMI_MASK capability bits in
> VMCB intr_control -
> V_NMI(11) - Indicates whether a virtual NMI is pending in the guest.
> V_NMI_MASK(12) - Indicates whether virtual NMI is masked in the guest.
> V_NMI_ENABLE(26) - Enables the NMI virtualization feature for the guest.
>
> When Hypervisor wants to inject NMI, it will set V_NMI bit, Processor will
> clear the V_NMI bit and Set the V_NMI_MASK which means the Guest is
> handling NMI, After the guest handled the NMI, The processor will clear
> the V_NMI_MASK on the successful completion of IRET instruction
> Or if VMEXIT occurs while delivering the virtual NMI.
>
> To enable the VNMI capability, Hypervisor need to program
> V_NMI_ENABLE bit 1.
>
> The presence of this feature is indicated via the CPUID function
> 0x8000000A_EDX[25].
>
> Testing -
> * Used qemu's `inject_nmi` for testing.
> * tested with and w/o AVIC case.
> * tested with kvm-unit-test
>
> Thanks,
> Santosh
> [1] https://www.amd.com/system/files/TechDocs/40332.pdf - APM Vol2,
> ch-15.20 - "Event Injection".
>
> Santosh Shukla (7):
>   x86/cpu: Add CPUID feature bit for VNMI
>   KVM: SVM: Add VNMI bit definition
>   KVM: SVM: Add VNMI support in get/set_nmi_mask
>   KVM: SVM: Report NMI not allowed when Guest busy handling VNMI
>   KVM: SVM: Add VNMI support in inject_nmi
>   KVM: nSVM: implement nested VNMI
>   KVM: SVM: Enable VNMI feature
>
>  arch/x86/include/asm/cpufeatures.h |  1 +
>  arch/x86/include/asm/svm.h         |  7 +++++
>  arch/x86/kvm/svm/nested.c          |  8 +++++
>  arch/x86/kvm/svm/svm.c             | 47 ++++++++++++++++++++++++++++--
>  arch/x86/kvm/svm/svm.h             |  1 +
>  5 files changed, 62 insertions(+), 2 deletions(-)
>
> --
> 2.25.1

When will we see vNMI support in silicon? Genoa?

Where is this feature officially documented? Is there an AMD64
equivalent of the "Intel Architecture Instruction Set Extensions and
Future Features" manual?

  parent reply	other threads:[~2022-06-06 23:01 UTC|newest]

Thread overview: 31+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2022-06-02 14:26 [PATCH 0/7] Virtual NMI feature Santosh Shukla
2022-06-02 14:26 ` [PATCH 1/7] x86/cpu: Add CPUID feature bit for VNMI Santosh Shukla
2022-06-07 12:32   ` Maxim Levitsky
2022-06-02 14:26 ` [PATCH 2/7] KVM: SVM: Add VNMI bit definition Santosh Shukla
2022-06-07 12:55   ` Maxim Levitsky
2022-06-17 14:42     ` Shukla, Santosh
2022-06-02 14:26 ` [PATCH 3/7] KVM: SVM: Add VNMI support in get/set_nmi_mask Santosh Shukla
2022-06-07 13:07   ` Maxim Levitsky
2022-06-17 14:45     ` Shukla, Santosh
2022-06-17 14:48       ` Shukla, Santosh
2022-07-10 16:09         ` Maxim Levitsky
2022-07-21  9:25           ` Shukla, Santosh
2022-07-10 18:39         ` Maxim Levitsky
2022-06-02 14:26 ` [PATCH 4/7] KVM: SVM: Report NMI not allowed when Guest busy handling VNMI Santosh Shukla
2022-06-07 13:10   ` Maxim Levitsky
2022-06-07 13:12     ` Maxim Levitsky
2022-06-17 14:59       ` Shukla, Santosh
2022-07-10 16:08         ` Maxim Levitsky
2022-07-21  9:31           ` Shukla, Santosh
2022-07-21 11:56             ` Maxim Levitsky
2022-06-02 14:26 ` [PATCH 5/7] KVM: SVM: Add VNMI support in inject_nmi Santosh Shukla
2022-06-07 13:14   ` Maxim Levitsky
2022-06-17 15:05     ` Shukla, Santosh
2022-07-10 16:07       ` Maxim Levitsky
2022-06-02 14:26 ` [PATCH 6/7] KVM: nSVM: implement nested VNMI Santosh Shukla
2022-06-07 13:22   ` Maxim Levitsky
2022-06-17 15:08     ` Shukla, Santosh
2022-06-02 14:26 ` [PATCH 7/7] KVM: SVM: Enable VNMI feature Santosh Shukla
2022-06-06 23:01 ` Jim Mattson [this message]
2022-06-08  8:23   ` [PATCH 0/7] Virtual NMI feature Shukla, Santosh
2022-09-05 19:45     ` Jim Mattson

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=CALMp9eTh9aZ_Ps0HehAuNfZqYmCS72RKyfAP3Pe_u08N9F8ZLw@mail.gmail.com \
    --to=jmattson@google.com \
    --cc=joro@8bytes.org \
    --cc=kvm@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=pbonzini@redhat.com \
    --cc=santosh.shukla@amd.com \
    --cc=seanjc@google.com \
    --cc=thomas.lendacky@amd.com \
    --cc=vkuznets@redhat.com \
    /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;
as well as URLs for NNTP newsgroup(s).