Commit 047c7229 authored by Sean Christopherson's avatar Sean Christopherson Committed by Paolo Bonzini

KVM: x86: Update KVM-only leaf handling to allow for 100% KVM-only leafs

Rename kvm_cpu_cap_init_scattered() to kvm_cpu_cap_init_kvm_defined() in
anticipation of adding KVM-only CPUID leafs that aren't recognized by the
kernel and thus not scattered, i.e. for leafs that are 100% KVM-defined.

Adjust/add comments to kvm_only_cpuid_leafs and KVM_X86_FEATURE to
document how to create new kvm_only_cpuid_leafs entries for scattered
features as well as features that are entirely unknown to the kernel.

No functional change intended.
Signed-off-by: default avatarSean Christopherson <seanjc@google.com>
Message-Id: <20221125125845.1182922-3-jiaxi.chen@linux.intel.com>
Signed-off-by: default avatarPaolo Bonzini <pbonzini@redhat.com>
parent c4690d01
...@@ -549,9 +549,9 @@ static __always_inline void __kvm_cpu_cap_mask(unsigned int leaf) ...@@ -549,9 +549,9 @@ static __always_inline void __kvm_cpu_cap_mask(unsigned int leaf)
} }
static __always_inline static __always_inline
void kvm_cpu_cap_init_scattered(enum kvm_only_cpuid_leafs leaf, u32 mask) void kvm_cpu_cap_init_kvm_defined(enum kvm_only_cpuid_leafs leaf, u32 mask)
{ {
/* Use kvm_cpu_cap_mask for non-scattered leafs. */ /* Use kvm_cpu_cap_mask for leafs that aren't KVM-only. */
BUILD_BUG_ON(leaf < NCAPINTS); BUILD_BUG_ON(leaf < NCAPINTS);
kvm_cpu_caps[leaf] = mask; kvm_cpu_caps[leaf] = mask;
...@@ -561,7 +561,7 @@ void kvm_cpu_cap_init_scattered(enum kvm_only_cpuid_leafs leaf, u32 mask) ...@@ -561,7 +561,7 @@ void kvm_cpu_cap_init_scattered(enum kvm_only_cpuid_leafs leaf, u32 mask)
static __always_inline void kvm_cpu_cap_mask(enum cpuid_leafs leaf, u32 mask) static __always_inline void kvm_cpu_cap_mask(enum cpuid_leafs leaf, u32 mask)
{ {
/* Use kvm_cpu_cap_init_scattered for scattered leafs. */ /* Use kvm_cpu_cap_init_kvm_defined for KVM-only leafs. */
BUILD_BUG_ON(leaf >= NCAPINTS); BUILD_BUG_ON(leaf >= NCAPINTS);
kvm_cpu_caps[leaf] &= mask; kvm_cpu_caps[leaf] &= mask;
...@@ -670,7 +670,7 @@ void kvm_set_cpu_caps(void) ...@@ -670,7 +670,7 @@ void kvm_set_cpu_caps(void)
F(XSAVEOPT) | F(XSAVEC) | F(XGETBV1) | F(XSAVES) | f_xfd F(XSAVEOPT) | F(XSAVEC) | F(XGETBV1) | F(XSAVES) | f_xfd
); );
kvm_cpu_cap_init_scattered(CPUID_12_EAX, kvm_cpu_cap_init_kvm_defined(CPUID_12_EAX,
SF(SGX1) | SF(SGX2) SF(SGX1) | SF(SGX2)
); );
......
...@@ -7,9 +7,9 @@ ...@@ -7,9 +7,9 @@
#include <asm/cpufeatures.h> #include <asm/cpufeatures.h>
/* /*
* Hardware-defined CPUID leafs that are scattered in the kernel, but need to * Hardware-defined CPUID leafs that are either scattered by the kernel or are
* be directly used by KVM. Note, these word values conflict with the kernel's * unknown to the kernel, but need to be directly used by KVM. Note, these
* "bug" caps, but KVM doesn't use those. * word values conflict with the kernel's "bug" caps, but KVM doesn't use those.
*/ */
enum kvm_only_cpuid_leafs { enum kvm_only_cpuid_leafs {
CPUID_12_EAX = NCAPINTS, CPUID_12_EAX = NCAPINTS,
...@@ -18,6 +18,18 @@ enum kvm_only_cpuid_leafs { ...@@ -18,6 +18,18 @@ enum kvm_only_cpuid_leafs {
NKVMCAPINTS = NR_KVM_CPU_CAPS - NCAPINTS, NKVMCAPINTS = NR_KVM_CPU_CAPS - NCAPINTS,
}; };
/*
* Define a KVM-only feature flag.
*
* For features that are scattered by cpufeatures.h, __feature_translate() also
* needs to be updated to translate the kernel-defined feature into the
* KVM-defined feature.
*
* For features that are 100% KVM-only, i.e. not defined by cpufeatures.h,
* forego the intermediate KVM_X86_FEATURE and directly define X86_FEATURE_* so
* that X86_FEATURE_* can be used in KVM. No __feature_translate() handling is
* needed in this case.
*/
#define KVM_X86_FEATURE(w, f) ((w)*32 + (f)) #define KVM_X86_FEATURE(w, f) ((w)*32 + (f))
/* Intel-defined SGX sub-features, CPUID level 0x12 (EAX). */ /* Intel-defined SGX sub-features, CPUID level 0x12 (EAX). */
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment