From: Sean Christopherson <seanjc@google.com>
To: Kai Huang <kai.huang@intel.com>
Cc: "pbonzini@redhat.com" <pbonzini@redhat.com>,
"kvm@vger.kernel.org" <kvm@vger.kernel.org>,
"linux-kernel@vger.kernel.org" <linux-kernel@vger.kernel.org>,
Chao Gao <chao.gao@intel.com>,
"andrew.cooper3@citrix.com" <andrew.cooper3@citrix.com>
Subject: Re: [PATCH v3 03/18] x86/reboot: KVM: Handle VMXOFF in KVM's reboot callback
Date: Mon, 22 May 2023 10:58:15 -0700 [thread overview]
Message-ID: <ZGutN1cylVw7ICB9@google.com> (raw)
In-Reply-To: <0f683245388e36917facbda4d0b69934fce7b0a8.camel@intel.com>
On Mon, May 22, 2023, Kai Huang wrote:
> On Fri, 2023-05-12 at 16:50 -0700, Sean Christopherson wrote:
> > Use KVM VMX's reboot/crash callback to do VMXOFF in an emergency instead
> > of manually and blindly doing VMXOFF. There's no need to attempt VMXOFF
> > if a hypervisor, i.e. KVM, isn't loaded/active, i.e. if the CPU can't
> > possibly be post-VMXON.
> >
> > Signed-off-by: Sean Christopherson <seanjc@google.com>
> > ---
> > diff --git a/arch/x86/kvm/vmx/vmx.c b/arch/x86/kvm/vmx/vmx.c
> > index fc9cdb4114cc..76cdb189f1b5 100644
> > --- a/arch/x86/kvm/vmx/vmx.c
> > +++ b/arch/x86/kvm/vmx/vmx.c
> > @@ -744,7 +744,7 @@ static int vmx_set_guest_uret_msr(struct vcpu_vmx *vmx,
> > return ret;
> > }
> >
> > -static void crash_vmclear_local_loaded_vmcss(void)
> > +static void vmx_emergency_disable(void)
> > {
> > int cpu = raw_smp_processor_id();
> > struct loaded_vmcs *v;
> > @@ -752,6 +752,8 @@ static void crash_vmclear_local_loaded_vmcss(void)
> > list_for_each_entry(v, &per_cpu(loaded_vmcss_on_cpu, cpu),
> > loaded_vmcss_on_cpu_link)
> > vmcs_clear(v->vmcs);
> > +
> > + __cpu_emergency_vmxoff();
>
> __cpu_emergency_vmxoff() internally checks whether VMX is enabled in CR4.
> Logically, looks it's more reasonable to do such check before VMCLEAR active
> VMCSes, although in practice there should be no problem I think.
>
> But this problem inherits from the existing code in upstream, so not sure
> whether it is worth fixing.
Hmm, I think it's worth fixing, if only to avoid confusing future readers. Blindly
doing VMCLEAR but then conditionally executing VMXOFF is nonsensical. I'll tack on
a patch, and also add a comment to call out that CR4.VMXE can be _cleared_
asynchronously by NMI, but can't be set after being checked. I.e. explain that
checking CR4.VMXE is a "best effort" sort of thing.
next prev parent reply other threads:[~2023-05-22 17:58 UTC|newest]
Thread overview: 38+ messages / expand[flat|nested] mbox.gz Atom feed top
2023-05-12 23:50 [PATCH v3 00/18] x86/reboot: KVM: Clean up "emergency" virt code Sean Christopherson
2023-05-12 23:50 ` [PATCH v3 01/18] x86/reboot: VMCLEAR active VMCSes before emergency reboot Sean Christopherson
2023-05-12 23:50 ` [PATCH v3 02/18] x86/reboot: Harden virtualization hooks for " Sean Christopherson
2023-05-22 12:46 ` Huang, Kai
2023-05-12 23:50 ` [PATCH v3 03/18] x86/reboot: KVM: Handle VMXOFF in KVM's reboot callback Sean Christopherson
2023-05-22 12:55 ` Huang, Kai
2023-05-22 17:58 ` Sean Christopherson [this message]
2023-05-22 23:11 ` Huang, Kai
2023-05-12 23:50 ` [PATCH v3 04/18] x86/reboot: KVM: Disable SVM during reboot via virt/KVM " Sean Christopherson
2023-05-22 12:56 ` Huang, Kai
2023-05-12 23:50 ` [PATCH v3 05/18] x86/reboot: Disable virtualization during reboot iff callback is registered Sean Christopherson
2023-05-22 13:04 ` Huang, Kai
2023-05-22 17:51 ` Sean Christopherson
2023-05-22 23:13 ` Huang, Kai
2023-05-12 23:50 ` [PATCH v3 06/18] x86/reboot: Assert that IRQs are disabled when turning off virtualization Sean Christopherson
2023-05-22 13:05 ` Huang, Kai
2023-05-12 23:50 ` [PATCH v3 07/18] x86/reboot: Hoist "disable virt" helpers above "emergency reboot" path Sean Christopherson
2023-05-22 13:11 ` Huang, Kai
2023-05-12 23:50 ` [PATCH v3 08/18] x86/reboot: Expose VMCS crash hooks if and only if KVM_{INTEL,AMD} is enabled Sean Christopherson
2023-05-22 13:11 ` Huang, Kai
2023-05-12 23:50 ` [PATCH v3 09/18] x86/virt: KVM: Open code cpu_has_vmx() in KVM VMX Sean Christopherson
2023-05-22 23:41 ` Huang, Kai
2023-05-12 23:50 ` [PATCH v3 10/18] x86/virt: KVM: Move VMXOFF helpers into " Sean Christopherson
2023-05-22 13:15 ` Huang, Kai
2023-05-12 23:50 ` [PATCH v3 11/18] KVM: SVM: Make KVM_AMD depend on CPU_SUP_AMD or CPU_SUP_HYGON Sean Christopherson
2023-05-12 23:50 ` [PATCH v3 12/18] x86/virt: Drop unnecessary check on extended CPUID level in cpu_has_svm() Sean Christopherson
2023-05-12 23:50 ` [PATCH v3 13/18] x86/virt: KVM: Open code cpu_has_svm() into kvm_is_svm_supported() Sean Christopherson
2023-05-22 23:44 ` Huang, Kai
2023-05-12 23:50 ` [PATCH v3 14/18] KVM: SVM: Check that the current CPU supports SVM in kvm_is_svm_supported() Sean Christopherson
2023-05-22 23:18 ` Huang, Kai
2023-05-12 23:50 ` [PATCH v3 15/18] KVM: VMX: Ensure CPU is stable when probing basic VMX support Sean Christopherson
2023-05-22 23:30 ` Huang, Kai
2023-05-12 23:50 ` [PATCH v3 16/18] x86/virt: KVM: Move "disable SVM" helper into KVM SVM Sean Christopherson
2023-05-22 23:26 ` Huang, Kai
2023-05-12 23:50 ` [PATCH v3 17/18] KVM: x86: Force kvm_rebooting=true during emergency reboot/crash Sean Christopherson
2023-05-22 23:25 ` Huang, Kai
2023-05-23 2:02 ` Huang, Kai
2023-05-12 23:50 ` [PATCH v3 18/18] KVM: SVM: Use "standard" stgi() helper when disabling SVM Sean Christopherson
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=ZGutN1cylVw7ICB9@google.com \
--to=seanjc@google.com \
--cc=andrew.cooper3@citrix.com \
--cc=chao.gao@intel.com \
--cc=kai.huang@intel.com \
--cc=kvm@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=pbonzini@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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.