Re: [PATCH 3/3] KVM: VMX: Adjust number of LBR records for PERF_CAPABILITIES at refresh

From: Like Xu
Date: Fri Jul 29 2022 - 06:10:28 EST


On 28/7/2022 7:34 am, Sean Christopherson wrote:
guest_cpuid_has() is expensive due to the linear search of guest CPUID
entries, intel_pmu_lbr_is_enabled() is checked on every VM-Enter,_and_
simply enumerating the same "Model" as the host causes KVM to set the
number of LBR records to a non-zero value.

Before reconsidering vcpu->arch.perf_capabilities to reach a conclusion,
how about this minor inline change help reduce my sins ?

diff --git a/arch/x86/kvm/vmx/vmx.c b/arch/x86/kvm/vmx/vmx.c
index 0ecbbae42976..06a21d66be13 100644
--- a/arch/x86/kvm/vmx/vmx.c
+++ b/arch/x86/kvm/vmx/vmx.c
@@ -7039,7 +7039,8 @@ static fastpath_t vmx_vcpu_run(struct kvm_vcpu *vcpu)
pt_guest_enter(vmx);

atomic_switch_perf_msrs(vmx);
- if (intel_pmu_lbr_is_enabled(vcpu))
+ if (vmx->lbr_desc.records.nr &&
+ (vcpu->arch.perf_capabilities & PMU_CAP_LBR_FMT))
vmx_passthrough_lbr_msrs(vcpu);

if (enable_preemption_timer)