From: Sean Christopherson <seanjc@google.com>
To: Thomas Gleixner <tglx@linutronix.de>,
Ingo Molnar <mingo@redhat.com>, Borislav Petkov <bp@alien8.de>,
Dave Hansen <dave.hansen@linux.intel.com>,
x86@kernel.org, Sean Christopherson <seanjc@google.com>,
Paolo Bonzini <pbonzini@redhat.com>
Cc: linux-kernel@vger.kernel.org, kvm@vger.kernel.org,
Andrew Cooper <Andrew.Cooper3@citrix.com>,
Kai Huang <kai.huang@intel.com>, Chao Gao <chao.gao@intel.com>
Subject: [PATCH v2 15/18] KVM: VMX: Ensure CPU is stable when probing basic VMX support
Date: Fri, 10 Mar 2023 13:42:29 -0800 [thread overview]
Message-ID: <20230310214232.806108-16-seanjc@google.com> (raw)
In-Reply-To: <20230310214232.806108-1-seanjc@google.com>
Disable migration when probing VMX support during module load to ensure
the CPU is stable, mostly to match similar SVM logic, where allowing
migration effective requires deliberately writing buggy code. As a bonus,
KVM won't report the wrong CPU to userspace if VMX is unsupported, but in
practice that is a very, very minor bonus as the only way that reporting
the wrong CPU would actually matter is if hardware is broken or if the
system is misconfigured, i.e. if KVM gets migrated from a CPU that _does_
support VMX to a CPU that does _not_ support VMX.
Signed-off-by: Sean Christopherson <seanjc@google.com>
---
arch/x86/kvm/vmx/vmx.c | 17 ++++++++++++++---
1 file changed, 14 insertions(+), 3 deletions(-)
diff --git a/arch/x86/kvm/vmx/vmx.c b/arch/x86/kvm/vmx/vmx.c
index 158853ab0d1b..374e3ddbd476 100644
--- a/arch/x86/kvm/vmx/vmx.c
+++ b/arch/x86/kvm/vmx/vmx.c
@@ -2766,9 +2766,9 @@ static int setup_vmcs_config(struct vmcs_config *vmcs_conf,
return 0;
}
-static bool kvm_is_vmx_supported(void)
+static bool __kvm_is_vmx_supported(void)
{
- int cpu = raw_smp_processor_id();
+ int cpu = smp_processor_id();
if (!(cpuid_ecx(1) & feature_bit(VMX))) {
pr_err("VMX not supported by CPU %d\n", cpu);
@@ -2784,13 +2784,24 @@ static bool kvm_is_vmx_supported(void)
return true;
}
+static bool kvm_is_vmx_supported(void)
+{
+ bool supported;
+
+ migrate_disable();
+ supported = __kvm_is_vmx_supported();
+ migrate_enable();
+
+ return supported;
+}
+
static int vmx_check_processor_compat(void)
{
int cpu = raw_smp_processor_id();
struct vmcs_config vmcs_conf;
struct vmx_capability vmx_cap;
- if (!kvm_is_vmx_supported())
+ if (!__kvm_is_vmx_supported())
return -EIO;
if (setup_vmcs_config(&vmcs_conf, &vmx_cap) < 0) {
--
2.40.0.rc1.284.g88254d51c5-goog
next prev parent reply other threads:[~2023-03-10 21:45 UTC|newest]
Thread overview: 35+ messages / expand[flat|nested] mbox.gz Atom feed top
2023-03-10 21:42 [PATCH v2 00/18] x86/reboot: KVM: Clean up "emergency" virt code Sean Christopherson
2023-03-10 21:42 ` [PATCH v2 01/18] x86/reboot: VMCLEAR active VMCSes before emergency reboot Sean Christopherson
2023-03-10 21:42 ` [PATCH v2 02/18] x86/reboot: Expose VMCS crash hooks if and only if KVM_INTEL is enabled Sean Christopherson
2023-03-13 0:31 ` Huang, Kai
2023-03-13 18:31 ` Sean Christopherson
2023-03-14 1:19 ` Huang, Kai
2023-03-10 21:42 ` [PATCH v2 03/18] x86/reboot: Harden virtualization hooks for emergency reboot Sean Christopherson
2023-03-13 8:26 ` Chao Gao
2023-03-13 17:08 ` Sean Christopherson
2023-03-10 21:42 ` [PATCH v2 04/18] x86/reboot: KVM: Handle VMXOFF in KVM's reboot callback Sean Christopherson
2023-03-10 21:42 ` [PATCH v2 05/18] x86/reboot: KVM: Disable SVM during reboot via virt/KVM " Sean Christopherson
2023-03-13 0:52 ` Huang, Kai
2023-03-13 17:18 ` Sean Christopherson
2023-03-14 0:42 ` Huang, Kai
2023-03-15 0:47 ` Sean Christopherson
2023-03-15 1:30 ` Huang, Kai
2023-03-10 21:42 ` [PATCH v2 06/18] x86/reboot: Hoist "disable virt" helpers above "emergency reboot" path Sean Christopherson
2023-03-10 21:42 ` [PATCH v2 07/18] x86/reboot: Disable virtualization during reboot iff callback is registered Sean Christopherson
2023-03-13 0:54 ` Huang, Kai
2023-03-13 18:40 ` Sean Christopherson
2023-03-14 0:50 ` Huang, Kai
2023-03-10 21:42 ` [PATCH v2 08/18] x86/reboot: Assert that IRQs are disabled when turning off virtualization Sean Christopherson
2023-03-10 21:42 ` [PATCH v2 09/18] x86/virt: KVM: Open code cpu_has_vmx() in KVM VMX Sean Christopherson
2023-03-10 21:42 ` [PATCH v2 10/18] x86/virt: KVM: Move VMXOFF helpers into " Sean Christopherson
2023-03-10 21:42 ` [PATCH v2 11/18] KVM: SVM: Make KVM_AMD depend on CPU_SUP_AMD or CPU_SUP_HYGON Sean Christopherson
2023-03-10 21:42 ` [PATCH v2 12/18] x86/virt: Drop unnecessary check on extended CPUID level in cpu_has_svm() Sean Christopherson
2023-03-10 21:42 ` [PATCH v2 13/18] x86/virt: KVM: Open code cpu_has_svm() into kvm_is_svm_supported() Sean Christopherson
2023-03-10 21:42 ` [PATCH v2 14/18] KVM: SVM: Check that the current CPU supports SVM in kvm_is_svm_supported() Sean Christopherson
2023-03-13 2:47 ` Huang, Kai
2023-03-13 17:29 ` Sean Christopherson
2023-03-14 0:17 ` Huang, Kai
2023-03-10 21:42 ` Sean Christopherson [this message]
2023-03-10 21:42 ` [PATCH v2 16/18] x86/virt: KVM: Move "disable SVM" helper into KVM SVM Sean Christopherson
2023-03-10 21:42 ` [PATCH v2 17/18] KVM: x86: Force kvm_rebooting=true during emergency reboot/crash Sean Christopherson
2023-03-10 21:42 ` [PATCH v2 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=20230310214232.806108-16-seanjc@google.com \
--to=seanjc@google.com \
--cc=Andrew.Cooper3@citrix.com \
--cc=bp@alien8.de \
--cc=chao.gao@intel.com \
--cc=dave.hansen@linux.intel.com \
--cc=kai.huang@intel.com \
--cc=kvm@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=mingo@redhat.com \
--cc=pbonzini@redhat.com \
--cc=tglx@linutronix.de \
--cc=x86@kernel.org \
/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