From: Sean Christopherson <seanjc@google.com>
To: Paolo Bonzini <pbonzini@redhat.com>,
Sean Christopherson <seanjc@google.com>,
Vitaly Kuznetsov <vkuznets@redhat.com>
Cc: kvm@vger.kernel.org, linux-kernel@vger.kernel.org,
Hou Wenlong <houwenlong.hwl@antgroup.com>,
Kechen Lu <kechenl@nvidia.com>,
Oliver Upton <oliver.upton@linux.dev>,
Maxim Levitsky <mlevitsk@redhat.com>,
Binbin Wu <binbin.wu@linux.intel.com>,
Yang Weijiang <weijiang.yang@intel.com>,
Robert Hoo <robert.hoo.linux@gmail.com>
Subject: [PATCH v2 49/49] *** DO NOT APPLY *** KVM: x86: Verify KVM initializes all consumed guest caps
Date: Fri, 17 May 2024 10:39:26 -0700 [thread overview]
Message-ID: <20240517173926.965351-50-seanjc@google.com> (raw)
In-Reply-To: <20240517173926.965351-1-seanjc@google.com>
Assert that all features queried via guest_cpu_cap_has() are known to KVM,
i.e. that KVM doesn't check for a feature that can never actually be set.
This is for demonstration purposes only, as the proper way to enforce this
is to do post-processing at build time (and there are other shortcomings
of this PoC, e.g. it requires all KVM modules to be built-in).
Not-signed-off-by: Sean Christopherson <seanjc@google.com>
---
arch/x86/kvm/cpuid.c | 81 +++++++++++++++++++++++--------
arch/x86/kvm/cpuid.h | 16 +++++-
arch/x86/kvm/x86.c | 2 +
include/asm-generic/vmlinux.lds.h | 4 ++
4 files changed, 81 insertions(+), 22 deletions(-)
diff --git a/arch/x86/kvm/cpuid.c b/arch/x86/kvm/cpuid.c
index 0e64a6332052..18ded0e682f2 100644
--- a/arch/x86/kvm/cpuid.c
+++ b/arch/x86/kvm/cpuid.c
@@ -37,6 +37,7 @@ u32 kvm_cpu_caps[NR_KVM_CPU_CAPS] __read_mostly;
EXPORT_SYMBOL_GPL(kvm_cpu_caps);
static u32 kvm_vmm_cpu_caps[NR_KVM_CPU_CAPS] __read_mostly;
+static u32 kvm_known_cpu_caps[NR_KVM_CPU_CAPS] __read_mostly;
u32 xstate_required_size(u64 xstate_bv, bool compacted)
{
@@ -143,6 +144,26 @@ u32 xstate_required_size(u64 xstate_bv, bool compacted)
0; \
})
+/*
+ * Vendor Features - For features that KVM supports, but are added in later
+ * because they require additional vendor enabling.
+ */
+#define VEND_F(name) \
+({ \
+ KVM_VALIDATE_CPU_CAP_USAGE(name); \
+ 0; \
+})
+
+/*
+ * Operating System Features - For features that KVM dynamically sets/clears at
+ * runtime, e.g. when CR4 changes, but are never advertised to userspace.
+ */
+#define OS_F(name) \
+({ \
+ KVM_VALIDATE_CPU_CAP_USAGE(name); \
+ 0; \
+})
+
/*
* Magic value used by KVM when querying userspace-provided CPUID entries and
* doesn't care about the CPIUD index because the index of the function in
@@ -727,6 +748,7 @@ do { \
u32 __leaf = __feature_leaf(X86_FEATURE_##name); \
\
BUILD_BUG_ON(__leaf != kvm_cpu_cap_init_in_progress); \
+ kvm_known_cpu_caps[__leaf] |= feature_bit(name); \
} while (0)
/*
@@ -771,14 +793,14 @@ void kvm_set_cpu_caps(void)
* NOTE: MONITOR (and MWAIT) are emulated as NOP, but *not*
* advertised to guests via CPUID!
*/
- F(XMM3) | F(PCLMULQDQ) | 0 /* DTES64 */ | VMM_F(MWAIT) |
- 0 /* DS-CPL, VMX, SMX, EST */ |
+ F(XMM3) | F(PCLMULQDQ) | VEND_F(DTES64) | VMM_F(MWAIT) |
+ VEND_F(VMX) | 0 /* DS-CPL, SMX, EST */ |
0 /* TM2 */ | F(SSSE3) | 0 /* CNXT-ID */ | 0 /* Reserved */ |
F(FMA) | F(CX16) | 0 /* xTPR Update */ | F(PDCM) |
F(PCID) | 0 /* Reserved, DCA */ | F(XMM4_1) |
F(XMM4_2) | EMUL_F(X2APIC) | F(MOVBE) | F(POPCNT) |
EMUL_F(TSC_DEADLINE_TIMER) | F(AES) | F(XSAVE) |
- 0 /* OSXSAVE */ | F(AVX) | F(F16C) | F(RDRAND) |
+ OS_F(OSXSAVE) | F(AVX) | F(F16C) | F(RDRAND) |
EMUL_F(HYPERVISOR)
);
@@ -788,7 +810,7 @@ void kvm_set_cpu_caps(void)
F(CX8) | F(APIC) | 0 /* Reserved */ | F(SEP) |
F(MTRR) | F(PGE) | F(MCA) | F(CMOV) |
F(PAT) | F(PSE36) | 0 /* PSN */ | F(CLFLUSH) |
- 0 /* Reserved, DS, ACPI */ | F(MMX) |
+ 0 /* Reserved */ | F(DS) | 0 /* ACPI */ | F(MMX) |
F(FXSR) | F(XMM) | F(XMM2) | F(SELFSNOOP) |
0 /* HTT, TM, Reserved, PBE */
);
@@ -796,17 +818,17 @@ void kvm_set_cpu_caps(void)
kvm_cpu_cap_init(CPUID_7_0_EBX,
F(FSGSBASE) | EMUL_F(TSC_ADJUST) | F(SGX) | F(BMI1) | F(HLE) |
F(AVX2) | F(FDP_EXCPTN_ONLY) | F(SMEP) | F(BMI2) | F(ERMS) |
- F(INVPCID) | F(RTM) | F(ZERO_FCS_FDS) | 0 /*MPX*/ |
+ F(INVPCID) | F(RTM) | F(ZERO_FCS_FDS) | VEND_F(MPX) |
F(AVX512F) | F(AVX512DQ) | F(RDSEED) | F(ADX) | F(SMAP) |
- F(AVX512IFMA) | F(CLFLUSHOPT) | F(CLWB) | 0 /*INTEL_PT*/ |
+ F(AVX512IFMA) | F(CLFLUSHOPT) | F(CLWB) | VEND_F(INTEL_PT) |
F(AVX512PF) | F(AVX512ER) | F(AVX512CD) | F(SHA_NI) |
F(AVX512BW) | F(AVX512VL));
kvm_cpu_cap_init(CPUID_7_ECX,
- F(AVX512VBMI) | RAW_F(LA57) | F(PKU) | 0 /*OSPKE*/ | F(RDPID) |
+ F(AVX512VBMI) | RAW_F(LA57) | F(PKU) | OS_F(OSPKE) | F(RDPID) |
F(AVX512_VPOPCNTDQ) | F(UMIP) | F(AVX512_VBMI2) | F(GFNI) |
F(VAES) | F(VPCLMULQDQ) | F(AVX512_VNNI) | F(AVX512_BITALG) |
- F(CLDEMOTE) | F(MOVDIRI) | F(MOVDIR64B) | 0 /*WAITPKG*/ |
+ F(CLDEMOTE) | F(MOVDIRI) | F(MOVDIR64B) | VEND_F(WAITPKG) |
F(SGX_LC) | F(BUS_LOCK_DETECT)
);
@@ -858,11 +880,11 @@ void kvm_set_cpu_caps(void)
);
kvm_cpu_cap_init(CPUID_8000_0001_ECX,
- F(LAHF_LM) | F(CMP_LEGACY) | 0 /*SVM*/ | 0 /* ExtApicSpace */ |
+ F(LAHF_LM) | F(CMP_LEGACY) | VEND_F(SVM) | 0 /* ExtApicSpace */ |
F(CR8_LEGACY) | F(ABM) | F(SSE4A) | F(MISALIGNSSE) |
F(3DNOWPREFETCH) | F(OSVW) | 0 /* IBS */ | F(XOP) |
0 /* SKINIT, WDT, LWP */ | F(FMA4) | F(TBM) |
- F(TOPOEXT) | 0 /* PERFCTR_CORE */
+ F(TOPOEXT) | VEND_F(PERFCTR_CORE)
);
kvm_cpu_cap_init(CPUID_8000_0001_EDX,
@@ -905,23 +927,22 @@ void kvm_set_cpu_caps(void)
kvm_cpu_cap_set(X86_FEATURE_AMD_SSBD);
if (!boot_cpu_has_bug(X86_BUG_SPEC_STORE_BYPASS))
kvm_cpu_cap_set(X86_FEATURE_AMD_SSB_NO);
- /*
- * The preference is to use SPEC CTRL MSR instead of the
- * VIRT_SPEC MSR.
- */
- if (boot_cpu_has(X86_FEATURE_LS_CFG_SSBD) &&
- !boot_cpu_has(X86_FEATURE_AMD_SSBD))
- kvm_cpu_cap_set(X86_FEATURE_VIRT_SSBD);
/*
* Hide all SVM features by default, SVM will set the cap bits for
* features it emulates and/or exposes for L1.
*/
- kvm_cpu_cap_init(CPUID_8000_000A_EDX, 0);
+ kvm_cpu_cap_init(CPUID_8000_000A_EDX,
+ VEND_F(VMCBCLEAN) | VEND_F(FLUSHBYASID) | VEND_F(NRIPS) |
+ VEND_F(TSCRATEMSR) | VEND_F(V_VMSAVE_VMLOAD) | VEND_F(LBRV) |
+ VEND_F(PAUSEFILTER) | VEND_F(PFTHRESHOLD) | VEND_F(VGIF) |
+ VEND_F(VNMI) | VEND_F(SVME_ADDR_CHK)
+ );
kvm_cpu_cap_init(CPUID_8000_001F_EAX,
- 0 /* SME */ | 0 /* SEV */ | 0 /* VM_PAGE_FLUSH */ | 0 /* SEV_ES */ |
- F(SME_COHERENT));
+ VEND_F(SME) | VEND_F(SEV) | 0 /* VM_PAGE_FLUSH */ | VEND_F(SEV_ES) |
+ F(SME_COHERENT)
+ );
kvm_cpu_cap_init(CPUID_8000_0021_EAX,
F(NO_NESTED_DATA_BP) | F(LFENCE_RDTSC) | 0 /* SmmPgCfgLock */ |
@@ -977,6 +998,26 @@ EXPORT_SYMBOL_GPL(kvm_set_cpu_caps);
#undef KVM_VALIDATE_CPU_CAP_USAGE
#define KVM_VALIDATE_CPU_CAP_USAGE(name)
+
+extern unsigned int __start___kvm_features[];
+extern unsigned int __stop___kvm_features[];
+
+void kvm_validate_cpu_caps(void)
+{
+ int i;
+
+ for (i = 0; i < __stop___kvm_features - __start___kvm_features; i++) {
+ u32 feature = __feature_translate(__start___kvm_features[i]);
+ u32 leaf = feature / 32;
+
+ if (kvm_known_cpu_caps[leaf] & BIT(feature & 31))
+ continue;
+
+ pr_warn("Word %u, bit %u (%lx) checked but not supported\n",
+ leaf, feature & 31, BIT(feature & 31));
+ }
+
+}
struct kvm_cpuid_array {
struct kvm_cpuid_entry2 *entries;
int maxnent;
diff --git a/arch/x86/kvm/cpuid.h b/arch/x86/kvm/cpuid.h
index 0bf3bddd0e29..32a86de980c7 100644
--- a/arch/x86/kvm/cpuid.h
+++ b/arch/x86/kvm/cpuid.h
@@ -10,6 +10,7 @@
extern u32 kvm_cpu_caps[NR_KVM_CPU_CAPS] __read_mostly;
void kvm_set_cpu_caps(void);
+void kvm_validate_cpu_caps(void);
void kvm_vcpu_after_set_cpuid(struct kvm_vcpu *vcpu);
void kvm_update_cpuid_runtime(struct kvm_vcpu *vcpu);
@@ -245,8 +246,8 @@ static __always_inline void guest_cpu_cap_change(struct kvm_vcpu *vcpu,
guest_cpu_cap_clear(vcpu, x86_feature);
}
-static __always_inline bool guest_cpu_cap_has(struct kvm_vcpu *vcpu,
- unsigned int x86_feature)
+static __always_inline bool __guest_cpu_cap_has(struct kvm_vcpu *vcpu,
+ unsigned int x86_feature)
{
unsigned int x86_leaf = __feature_leaf(x86_feature);
@@ -254,6 +255,17 @@ static __always_inline bool guest_cpu_cap_has(struct kvm_vcpu *vcpu,
return vcpu->arch.cpu_caps[x86_leaf] & __feature_bit(x86_feature);
}
+#define guest_cpu_cap_has(vcpu, x86_feature) \
+({ \
+ asm volatile( \
+ " .pushsection \"__kvm_features\",\"a\"\n" \
+ " .balign 4\n" \
+ " .long " __stringify(x86_feature) " \n" \
+ " .popsection\n" \
+ ); \
+ __guest_cpu_cap_has(vcpu, x86_feature); \
+})
+
static inline bool kvm_vcpu_is_legal_cr3(struct kvm_vcpu *vcpu, unsigned long cr3)
{
if (guest_cpu_cap_has(vcpu, X86_FEATURE_LAM))
diff --git a/arch/x86/kvm/x86.c b/arch/x86/kvm/x86.c
index 5aa7581802f7..f6b7c5c862fb 100644
--- a/arch/x86/kvm/x86.c
+++ b/arch/x86/kvm/x86.c
@@ -9790,6 +9790,8 @@ int kvm_x86_vendor_init(struct kvm_x86_init_ops *ops)
if (r != 0)
goto out_mmu_exit;
+ kvm_validate_cpu_caps();
+
kvm_ops_update(ops);
for_each_online_cpu(cpu) {
diff --git a/include/asm-generic/vmlinux.lds.h b/include/asm-generic/vmlinux.lds.h
index f7749d0f2562..102fc2a39083 100644
--- a/include/asm-generic/vmlinux.lds.h
+++ b/include/asm-generic/vmlinux.lds.h
@@ -533,6 +533,10 @@
BOUNDED_SECTION_BY(__modver, ___modver) \
} \
\
+ __kvm_features : AT(ADDR(__kvm_features) - LOAD_OFFSET) { \
+ BOUNDED_SECTION_BY(__kvm_features, ___kvm_features) \
+ } \
+ \
KCFI_TRAPS \
\
RO_EXCEPTION_TABLE \
--
2.45.0.215.g3402c0e53f-goog
next prev parent reply other threads:[~2024-05-17 17:41 UTC|newest]
Thread overview: 185+ messages / expand[flat|nested] mbox.gz Atom feed top
2024-05-17 17:38 [PATCH v2 00/49] KVM: x86: CPUID overhaul, fixes, and caching Sean Christopherson
2024-05-17 17:38 ` [PATCH v2 01/49] KVM: x86: Do all post-set CPUID processing during vCPU creation Sean Christopherson
2024-07-05 0:48 ` Maxim Levitsky
2024-07-08 18:46 ` Sean Christopherson
2024-07-24 17:24 ` Maxim Levitsky
2024-05-17 17:38 ` [PATCH v2 02/49] KVM: x86: Explicitly do runtime CPUID updates "after" initial setup Sean Christopherson
2024-07-05 0:51 ` Maxim Levitsky
2024-07-09 19:46 ` Sean Christopherson
2024-07-24 17:24 ` Maxim Levitsky
2024-05-17 17:38 ` [PATCH v2 03/49] KVM: x86: Account for KVM-reserved CR4 bits when passing through CR4 on VMX Sean Christopherson
2024-07-05 0:55 ` Maxim Levitsky
2024-07-09 19:58 ` Sean Christopherson
2024-07-24 17:28 ` Maxim Levitsky
2024-05-17 17:38 ` [PATCH v2 04/49] KVM: selftests: Update x86's set_sregs_test to match KVM's CPUID enforcement Sean Christopherson
2024-07-05 0:55 ` Maxim Levitsky
2024-05-17 17:38 ` [PATCH v2 05/49] KVM: selftests: Assert that the @cpuid passed to get_cpuid_entry() is non-NULL Sean Christopherson
2024-07-05 0:58 ` Maxim Levitsky
2024-07-08 19:33 ` Sean Christopherson
2024-07-24 17:28 ` Maxim Levitsky
2024-11-21 18:57 ` Sean Christopherson
2024-05-17 17:38 ` [PATCH v2 06/49] KVM: selftests: Refresh vCPU CPUID cache in __vcpu_get_cpuid_entry() Sean Christopherson
2024-07-05 0:59 ` Maxim Levitsky
2024-05-17 17:38 ` [PATCH v2 07/49] KVM: selftests: Verify KVM stuffs runtime CPUID OS bits on CR4 writes Sean Christopherson
2024-07-05 1:02 ` Maxim Levitsky
2024-07-08 19:39 ` Sean Christopherson
2024-05-17 17:38 ` [PATCH v2 08/49] KVM: x86: Move __kvm_is_valid_cr4() definition to x86.h Sean Christopherson
2024-07-05 1:02 ` Maxim Levitsky
2024-05-17 17:38 ` [PATCH v2 09/49] KVM: x86/pmu: Drop now-redundant refresh() during init() Sean Christopherson
2024-07-05 1:02 ` Maxim Levitsky
2024-05-17 17:38 ` [PATCH v2 10/49] KVM: x86: Drop now-redundant MAXPHYADDR and GPA rsvd bits from vCPU creation Sean Christopherson
2024-07-05 1:13 ` Maxim Levitsky
2024-07-08 19:53 ` Sean Christopherson
2024-07-24 17:30 ` Maxim Levitsky
2024-05-17 17:38 ` [PATCH v2 11/49] KVM: x86: Disallow KVM_CAP_X86_DISABLE_EXITS after " Sean Christopherson
2024-07-05 1:17 ` Maxim Levitsky
2024-07-08 19:43 ` Sean Christopherson
2024-07-24 17:31 ` Maxim Levitsky
2024-07-25 18:07 ` Sean Christopherson
2024-07-12 7:42 ` Xiaoyao Li
2024-05-17 17:38 ` [PATCH v2 12/49] KVM: x86: Reject disabling of MWAIT/HLT interception when not allowed Sean Christopherson
2024-05-22 5:09 ` Binbin Wu
2024-05-28 18:56 ` Sean Christopherson
2024-07-05 1:17 ` Maxim Levitsky
2024-07-12 7:51 ` Xiaoyao Li
2024-07-12 13:31 ` Sean Christopherson
2024-05-17 17:38 ` [PATCH v2 13/49] KVM: selftests: Fix a bad TEST_REQUIRE() in x86's KVM PV test Sean Christopherson
2024-07-05 1:17 ` Maxim Levitsky
2024-05-17 17:38 ` [PATCH v2 14/49] KVM: selftests: Update x86's KVM PV test to match KVM's disabling exits behavior Sean Christopherson
2024-07-05 1:17 ` Maxim Levitsky
2024-05-17 17:38 ` [PATCH v2 15/49] KVM: x86: Zero out PV features cache when the CPUID leaf is not present Sean Christopherson
2024-07-05 1:17 ` Maxim Levitsky
2024-05-17 17:38 ` [PATCH v2 16/49] KVM: x86: Don't update PV features caches when enabling enforcement capability Sean Christopherson
2024-07-05 1:17 ` Maxim Levitsky
2024-05-17 17:38 ` [PATCH v2 17/49] KVM: x86: Do reverse CPUID sanity checks in __feature_leaf() Sean Christopherson
2024-07-05 1:17 ` Maxim Levitsky
2024-05-17 17:38 ` [PATCH v2 18/49] KVM: x86: Account for max supported CPUID leaf when getting raw host CPUID Sean Christopherson
2024-06-19 6:17 ` Yang, Weijiang
2024-06-19 8:07 ` Yang, Weijiang
2024-07-05 1:17 ` Maxim Levitsky
2024-05-17 17:38 ` [PATCH v2 19/49] KVM: x86: Add a macro to init CPUID features that ignore host kernel support Sean Christopherson
2024-07-05 1:21 ` Maxim Levitsky
2024-07-08 20:53 ` Sean Christopherson
2024-07-24 17:39 ` Maxim Levitsky
2024-07-08 22:36 ` Sean Christopherson
2024-07-24 17:40 ` Maxim Levitsky
2024-05-17 17:38 ` [PATCH v2 20/49] KVM: x86: Rename kvm_cpu_cap_mask() to kvm_cpu_cap_init() Sean Christopherson
2024-05-22 6:23 ` Binbin Wu
2024-05-28 18:54 ` Sean Christopherson
2024-07-05 1:24 ` Maxim Levitsky
2024-05-17 17:38 ` [PATCH v2 21/49] KVM: x86: Add a macro to init CPUID features that are 64-bit only Sean Christopherson
2024-07-05 1:24 ` Maxim Levitsky
2024-07-17 13:31 ` Xiaoyao Li
2024-05-17 17:38 ` [PATCH v2 22/49] KVM: x86: Add a macro to precisely handle aliased 0x1.EDX CPUID features Sean Christopherson
2024-07-05 1:25 ` Maxim Levitsky
2024-07-08 21:08 ` Sean Christopherson
2024-07-24 17:46 ` Maxim Levitsky
2024-07-25 18:39 ` Sean Christopherson
2024-08-05 11:06 ` mlevitsk
2024-08-05 22:00 ` Sean Christopherson
2024-09-10 20:37 ` Maxim Levitsky
2024-09-11 15:37 ` Sean Christopherson
2024-11-22 3:17 ` Maxim Levitsky
2024-11-27 14:38 ` Sean Christopherson
2024-05-17 17:39 ` [PATCH v2 23/49] KVM: x86: Handle kernel- and KVM-defined CPUID words in a single helper Sean Christopherson
2024-07-05 1:28 ` Maxim Levitsky
2024-07-08 21:18 ` Sean Christopherson
2024-07-17 14:00 ` Xiaoyao Li
2024-07-24 17:51 ` Maxim Levitsky
2024-07-25 19:18 ` Sean Christopherson
2024-08-05 11:07 ` mlevitsk
2024-05-17 17:39 ` [PATCH v2 24/49] KVM: x86: #undef SPEC_CTRL_SSBD in cpuid.c to avoid macro collisions Sean Christopherson
2024-07-05 1:30 ` Maxim Levitsky
2024-07-08 21:29 ` Sean Christopherson
2024-07-24 17:54 ` Maxim Levitsky
2024-07-26 23:34 ` Sean Christopherson
2024-08-05 11:11 ` mlevitsk
2024-08-05 21:35 ` Sean Christopherson
2024-09-10 20:37 ` Maxim Levitsky
2024-05-17 17:39 ` [PATCH v2 25/49] KVM: x86: Harden CPU capabilities processing against out-of-scope features Sean Christopherson
2024-07-05 1:31 ` Maxim Levitsky
2024-07-09 18:11 ` Sean Christopherson
2024-07-24 17:55 ` Maxim Levitsky
2024-05-17 17:39 ` [PATCH v2 26/49] KVM: x86: Add a macro to init CPUID features that KVM emulates in software Sean Christopherson
2024-07-05 1:59 ` Maxim Levitsky
2024-07-08 22:30 ` Sean Christopherson
2024-07-24 17:58 ` Maxim Levitsky
2024-07-27 0:06 ` Sean Christopherson
2024-08-05 11:16 ` mlevitsk
2024-08-05 19:59 ` Sean Christopherson
2024-09-10 20:41 ` Maxim Levitsky
2024-09-11 16:03 ` Sean Christopherson
2024-11-22 3:28 ` Maxim Levitsky
2024-05-17 17:39 ` [PATCH v2 27/49] KVM: x86: Swap incoming guest CPUID into vCPU before massaging in KVM_SET_CPUID2 Sean Christopherson
2024-07-05 1:32 ` Maxim Levitsky
2024-07-08 21:37 ` Sean Christopherson
2024-05-17 17:39 ` [PATCH v2 28/49] KVM: x86: Clear PV_UNHALT for !HLT-exiting only when userspace sets CPUID Sean Christopherson
2024-07-05 1:32 ` Maxim Levitsky
2024-05-17 17:39 ` [PATCH v2 29/49] KVM: x86: Remove unnecessary caching of KVM's PV CPUID base Sean Christopherson
2024-07-05 1:51 ` Maxim Levitsky
2024-07-09 19:00 ` Sean Christopherson
2024-07-24 17:59 ` Maxim Levitsky
2024-05-17 17:39 ` [PATCH v2 30/49] KVM: x86: Always operate on kvm_vcpu data in cpuid_entry2_find() Sean Christopherson
2024-07-05 1:51 ` Maxim Levitsky
2024-05-17 17:39 ` [PATCH v2 31/49] KVM: x86: Move kvm_find_cpuid_entry{,_index}() up near cpuid_entry2_find() Sean Christopherson
2024-07-05 1:51 ` Maxim Levitsky
2024-05-17 17:39 ` [PATCH v2 32/49] KVM: x86: Remove all direct usage of cpuid_entry2_find() Sean Christopherson
2024-07-05 1:52 ` Maxim Levitsky
2024-05-17 17:39 ` [PATCH v2 33/49] KVM: x86: Advertise TSC_DEADLINE_TIMER in KVM_GET_SUPPORTED_CPUID Sean Christopherson
2024-05-22 9:11 ` Binbin Wu
2024-05-28 15:21 ` Sean Christopherson
2024-07-05 2:04 ` Maxim Levitsky
2024-07-09 19:28 ` Sean Christopherson
2024-07-24 18:00 ` Maxim Levitsky
2024-05-17 17:39 ` [PATCH v2 34/49] KVM: x86: Advertise HYPERVISOR " Sean Christopherson
2024-07-05 2:04 ` Maxim Levitsky
2024-05-17 17:39 ` [PATCH v2 35/49] KVM: x86: Add a macro to handle features that are fully VMM controlled Sean Christopherson
2024-07-05 2:08 ` Maxim Levitsky
2024-05-17 17:39 ` [PATCH v2 36/49] KVM: x86: Rename "governed features" helpers to use "guest_cpu_cap" Sean Christopherson
2024-05-22 14:23 ` Binbin Wu
2024-05-17 17:39 ` [PATCH v2 37/49] KVM: x86: Replace guts of "governed" features with comprehensive cpu_caps Sean Christopherson
2024-06-20 2:20 ` Yang, Weijiang
2024-07-05 2:10 ` Maxim Levitsky
2024-07-09 18:30 ` Sean Christopherson
2024-07-24 18:00 ` Maxim Levitsky
2024-05-17 17:39 ` [PATCH v2 38/49] KVM: x86: Initialize guest cpu_caps based on guest CPUID Sean Christopherson
2024-06-20 2:24 ` Yang, Weijiang
2024-07-05 2:13 ` Maxim Levitsky
2024-05-17 17:39 ` [PATCH v2 39/49] KVM: x86: Extract code for generating per-entry emulated CPUID information Sean Christopherson
2024-07-05 2:18 ` Maxim Levitsky
2024-07-09 0:13 ` Sean Christopherson
2024-07-24 18:00 ` Maxim Levitsky
2024-05-17 17:39 ` [PATCH v2 40/49] KVM: x86: Initialize guest cpu_caps based on KVM support Sean Christopherson
2024-07-05 2:22 ` Maxim Levitsky
2024-07-09 0:10 ` Sean Christopherson
2024-07-24 18:01 ` Maxim Levitsky
2024-07-29 15:34 ` Sean Christopherson
2024-08-05 11:16 ` mlevitsk
2024-05-17 17:39 ` [PATCH v2 41/49] KVM: x86: Avoid double CPUID lookup when updating MWAIT at runtime Sean Christopherson
2024-07-05 2:22 ` Maxim Levitsky
2024-05-17 17:39 ` [PATCH v2 42/49] KVM: x86: Drop unnecessary check that cpuid_entry2_find() returns right leaf Sean Christopherson
2024-07-05 2:22 ` Maxim Levitsky
2024-05-17 17:39 ` [PATCH v2 43/49] KVM: x86: Update OS{XSAVE,PKE} bits in guest CPUID irrespective of host support Sean Christopherson
2024-07-05 2:22 ` Maxim Levitsky
2024-05-17 17:39 ` [PATCH v2 44/49] KVM: x86: Update guest cpu_caps at runtime for dynamic CPUID-based features Sean Christopherson
2024-07-05 2:26 ` Maxim Levitsky
2024-07-09 0:24 ` Sean Christopherson
2024-09-10 20:41 ` Maxim Levitsky
2024-09-11 15:41 ` Sean Christopherson
2024-11-22 2:11 ` Maxim Levitsky
2024-05-17 17:39 ` [PATCH v2 45/49] KVM: x86: Shuffle code to prepare for dropping guest_cpuid_has() Sean Christopherson
2024-07-05 2:26 ` Maxim Levitsky
2024-05-17 17:39 ` [PATCH v2 46/49] KVM: x86: Replace (almost) all guest CPUID feature queries with cpu_caps Sean Christopherson
2024-07-05 2:34 ` Maxim Levitsky
2024-07-09 19:20 ` Sean Christopherson
2024-07-24 18:01 ` Maxim Levitsky
2024-05-17 17:39 ` [PATCH v2 47/49] KVM: x86: Drop superfluous host XSAVE check when adjusting guest XSAVES caps Sean Christopherson
2024-07-05 2:36 ` Maxim Levitsky
2024-07-09 19:15 ` Sean Christopherson
2024-07-24 18:02 ` Maxim Levitsky
2024-05-17 17:39 ` [PATCH v2 48/49] KVM: x86: Add a macro for features that are synthesized into boot_cpu_data Sean Christopherson
2024-07-05 2:43 ` Maxim Levitsky
2024-07-09 21:13 ` Sean Christopherson
2024-07-24 18:04 ` Maxim Levitsky
2024-05-17 17:39 ` Sean Christopherson [this message]
2024-05-17 17:54 ` [PATCH v2 00/49] KVM: x86: CPUID overhaul, fixes, and caching Paolo Bonzini
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=20240517173926.965351-50-seanjc@google.com \
--to=seanjc@google.com \
--cc=binbin.wu@linux.intel.com \
--cc=houwenlong.hwl@antgroup.com \
--cc=kechenl@nvidia.com \
--cc=kvm@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=mlevitsk@redhat.com \
--cc=oliver.upton@linux.dev \
--cc=pbonzini@redhat.com \
--cc=robert.hoo.linux@gmail.com \
--cc=vkuznets@redhat.com \
--cc=weijiang.yang@intel.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
all inboxes | Powered by JetHome®