KVM: x86/pmu: Advertise PERFCTR_CORE iff the min nr of counters is met
Enable and advertise PERFCTR_CORE if and only if the minimum number of required counters are available, i.e. if perf says there are less than six general purpose counters. Opportunistically, use kvm_cpu_cap_check_and_set() instead of open coding the check for host support. Suggested-by: Sean Christopherson <seanjc@google.com> Signed-off-by: Like Xu <likexu@tencent.com> [sean: massage shortlog and changelog] Link: https://lore.kernel.org/r/20230603011058.1038821-9-seanjc@google.com Signed-off-by: Sean Christopherson <seanjc@google.com>
This commit is contained in:
parent
6a08083f29
commit
d338d8789e
|
@ -5025,9 +5025,18 @@ static __init void svm_set_cpu_caps(void)
|
|||
boot_cpu_has(X86_FEATURE_AMD_SSBD))
|
||||
kvm_cpu_cap_set(X86_FEATURE_VIRT_SSBD);
|
||||
|
||||
/* AMD PMU PERFCTR_CORE CPUID */
|
||||
if (enable_pmu && boot_cpu_has(X86_FEATURE_PERFCTR_CORE))
|
||||
kvm_cpu_cap_set(X86_FEATURE_PERFCTR_CORE);
|
||||
if (enable_pmu) {
|
||||
/*
|
||||
* Enumerate support for PERFCTR_CORE if and only if KVM has
|
||||
* access to enough counters to virtualize "core" support,
|
||||
* otherwise limit vPMU support to the legacy number of counters.
|
||||
*/
|
||||
if (kvm_pmu_cap.num_counters_gp < AMD64_NUM_COUNTERS_CORE)
|
||||
kvm_pmu_cap.num_counters_gp = min(AMD64_NUM_COUNTERS,
|
||||
kvm_pmu_cap.num_counters_gp);
|
||||
else
|
||||
kvm_cpu_cap_check_and_set(X86_FEATURE_PERFCTR_CORE);
|
||||
}
|
||||
|
||||
/* CPUID 0x8000001F (SME/SEV features) */
|
||||
sev_set_cpu_caps();
|
||||
|
|
Loading…
Reference in New Issue