linux-kernel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Maxim Levitsky <mlevitsk@redhat.com>
To: Santosh Shukla <santosh.shukla@amd.com>,
	Paolo Bonzini <pbonzini@redhat.com>
Cc: Sean Christopherson <seanjc@google.com>,
	Vitaly Kuznetsov <vkuznets@redhat.com>,
	Jim Mattson <jmattson@google.com>, Joerg Roedel <joro@8bytes.org>,
	Tom Lendacky <thomas.lendacky@amd.com>,
	kvm@vger.kernel.org, linux-kernel@vger.kernel.org
Subject: Re: [PATCH 3/7] KVM: SVM: Add VNMI support in get/set_nmi_mask
Date: Tue, 07 Jun 2022 16:07:13 +0300	[thread overview]
Message-ID: <d3f2da59b5afd300531ae428174c1f91d731e655.camel@redhat.com> (raw)
In-Reply-To: <20220602142620.3196-4-santosh.shukla@amd.com>

On Thu, 2022-06-02 at 19:56 +0530, Santosh Shukla wrote:
> VMCB intr_ctrl bit12 (V_NMI_MASK) is set by the processor when handling
> NMI in guest and is cleared after the NMI is handled. Treat V_NMI_MASK as
> read-only in the hypervisor and do not populate set accessors.
> 
> Signed-off-by: Santosh Shukla <santosh.shukla@amd.com>
> ---
>  arch/x86/kvm/svm/svm.c | 20 +++++++++++++++++++-
>  1 file changed, 19 insertions(+), 1 deletion(-)
> 
> diff --git a/arch/x86/kvm/svm/svm.c b/arch/x86/kvm/svm/svm.c
> index 860f28c668bd..d67a54517d95 100644
> --- a/arch/x86/kvm/svm/svm.c
> +++ b/arch/x86/kvm/svm/svm.c
> @@ -323,6 +323,16 @@ static int is_external_interrupt(u32 info)
>         return info == (SVM_EVTINJ_VALID | SVM_EVTINJ_TYPE_INTR);
>  }
>  
> +static bool is_vnmi_enabled(struct vmcb *vmcb)
> +{
> +       return vnmi && (vmcb->control.int_ctl & V_NMI_ENABLE);
> +}

Following Paolo's suggestion I recently removed vgif_enabled(),
based on the logic that vgif_enabled == vgif, because
we always enable vGIF for L1 as long as 'vgif' module param is set,
which is set unless either hardware or user cleared it.

Note that here vmcb is the current vmcb, which can be vmcb02,
and it might be wrong

> +
> +static bool is_vnmi_mask_set(struct vmcb *vmcb)
> +{
> +       return !!(vmcb->control.int_ctl & V_NMI_MASK);
> +}
> +
>  static u32 svm_get_interrupt_shadow(struct kvm_vcpu *vcpu)
>  {
>         struct vcpu_svm *svm = to_svm(vcpu);
> @@ -3502,13 +3512,21 @@ static int svm_nmi_allowed(struct kvm_vcpu *vcpu, bool for_injection)
>  
>  static bool svm_get_nmi_mask(struct kvm_vcpu *vcpu)
>  {
> -       return !!(vcpu->arch.hflags & HF_NMI_MASK);
> +       struct vcpu_svm *svm = to_svm(vcpu);
> +
> +       if (is_vnmi_enabled(svm->vmcb))
> +               return is_vnmi_mask_set(svm->vmcb);
> +       else
> +               return !!(vcpu->arch.hflags & HF_NMI_MASK);
>  }
>  
>  static void svm_set_nmi_mask(struct kvm_vcpu *vcpu, bool masked)
>  {
>         struct vcpu_svm *svm = to_svm(vcpu);
>  
> +       if (is_vnmi_enabled(svm->vmcb))
> +               return;

What if the KVM wants to mask NMI, shoudn't we update the 
V_NMI_MASK value in int_ctl instead of doing nothing?

Best regards,
	Maxim Levitsky


> +
>         if (masked) {
>                 vcpu->arch.hflags |= HF_NMI_MASK;
>                 if (!sev_es_guest(vcpu->kvm))



  reply	other threads:[~2022-06-07 13:07 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 [this message]
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 ` [PATCH 0/7] Virtual NMI feature Jim Mattson
2022-06-08  8:23   ` 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=d3f2da59b5afd300531ae428174c1f91d731e655.camel@redhat.com \
    --to=mlevitsk@redhat.com \
    --cc=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).