Message ID | 20230214050757.9623-11-likexu@tencent.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | KVM: x86: Add AMD Guest PerfMonV2 PMU support | expand |
This shortlog is flat out wrong. This patch does not add X86_FEATURE_PERFMON_V2, it adds a KVM-only leaf to redirect X86_FEATURE_PERFMON_V2 to its architectural location when KVM queries the leaf, e.g. via guest_cpuid_has(). On Tue, Feb 14, 2023, Like Xu wrote: > From: Like Xu <likexu@tencent.com> > > Considering that the core kernel may also want to know this flag, to avoid Please write changelogs so that they do not depend on the shortlog for context. I know the tip maintainers in particular like to make the changelog a continuation of the shortlog, but I find it really annoying, especially when reviewing in mutt, e.g. as I'm typing this, I don't even have the shortlog visible. In the vast majority of cases, being more explicit rarely adds more than a few chars, e.g. you'll save more by reducing the fluff in this changelog. > confusion this needs to be a scattered flag rather than a pure KVM flag so > that KVM can redirect it to the hardware-defined bit position, which is the > role of __feature_translate() and KVM_X86_FEATURE_PERFMON_V2. Like the shortlog, the changelog is best misleading, X86_FEATURE_PERFMON_V2 is already a scattered flag. Define a KVM-only leaf for AMD's PerfMonV2 feature flag to redirect the kernel's scattered version to its architectural location, e.g. so that KVM can query guest support via guest_cpuid_has().
diff --git a/arch/x86/kvm/reverse_cpuid.h b/arch/x86/kvm/reverse_cpuid.h index 4945456fd646..333e28b0a13c 100644 --- a/arch/x86/kvm/reverse_cpuid.h +++ b/arch/x86/kvm/reverse_cpuid.h @@ -15,6 +15,7 @@ enum kvm_only_cpuid_leafs { CPUID_12_EAX = NCAPINTS, CPUID_7_1_EDX, CPUID_8000_0007_EDX, + CPUID_8000_0022_EAX, NR_KVM_CPU_CAPS, NKVMCAPINTS = NR_KVM_CPU_CAPS - NCAPINTS, @@ -47,6 +48,9 @@ enum kvm_only_cpuid_leafs { /* CPUID level 0x80000007 (EDX). */ #define KVM_X86_FEATURE_CONSTANT_TSC KVM_X86_FEATURE(CPUID_8000_0007_EDX, 8) +/* CPUID level 0x80000022 (EAX) */ +#define KVM_X86_FEATURE_PERFMON_V2 KVM_X86_FEATURE(CPUID_8000_0022_EAX, 0) + struct cpuid_reg { u32 function; u32 index; @@ -73,6 +77,7 @@ static const struct cpuid_reg reverse_cpuid[] = { [CPUID_8000_001F_EAX] = {0x8000001f, 0, CPUID_EAX}, [CPUID_7_1_EDX] = { 7, 1, CPUID_EDX}, [CPUID_8000_0007_EDX] = {0x80000007, 0, CPUID_EDX}, + [CPUID_8000_0022_EAX] = {0x80000022, 0, CPUID_EAX}, }; /* @@ -107,6 +112,8 @@ static __always_inline u32 __feature_translate(int x86_feature) return KVM_X86_FEATURE_SGX_EDECCSSA; else if (x86_feature == X86_FEATURE_CONSTANT_TSC) return KVM_X86_FEATURE_CONSTANT_TSC; + else if (x86_feature == X86_FEATURE_PERFMON_V2) + return KVM_X86_FEATURE_PERFMON_V2; return x86_feature; }