FAILED: patch "[PATCH] KVM: VMX: Add helper to check if the guest PMU has" failed to apply to 4.19-stable tree
Subsystems (3)
[email protected]
maintainerThe patch below does not apply to the 4.19-stable tree.
If someone wants it applied there, or to any other stable or longterm tree, then please email the backport, including the original git commit id to <[email protected]>.
thanks,
greg k-h
------------------ original commit in Linus's tree ------------------
From b663f0b5f3d665c261256d1f76e98f077c6e56af Mon Sep 17 00:00:00 2001
From: Sean Christopherson <[email protected]>
Date: Fri, 22 Jul 2022 22:44:07 +0000
Subject: [PATCH] KVM: VMX: Add helper to check if the guest PMU has
PERF_GLOBAL_CTRL
Add a helper to check of the guest PMU has PERF_GLOBAL_CTRL, which is unintuitive _and_ diverges from Intel's architecturally defined behavior. Even worse, KVM currently implements the check using two different (but equivalent) checks, _and_ there has been at least one attempt to add a _third_ flavor.
Message-Id: <[email protected]>
arch/x86/kvm/vmx/pmu_intel.c +2 -2
@@ -111,7 +111,7 @@ static bool intel_pmc_is_enabled(struct kvm_pmc *pmc) {struct kvm_pmu *pmu =pmc_to_pmu (pmc); -if (pmu->version <2 ) +if (!intel_pmu_has_perf_global_ctrl (pmu))return true;return test_bit (pmc->idx, (unsigned long *)&pmu->global_ctrl);
@@ -207,7 +207,7 @@ static bool intel_is_valid_msr(struct kvm_vcpu *vcpu, u32 msr)case MSR_CORE_PERF_GLOBAL_STATUS :case MSR_CORE_PERF_GLOBAL_CTRL :case MSR_CORE_PERF_GLOBAL_OVF_CTRL : - ret = pmu->version >1 ; +return intel_pmu_has_perf_global_ctrl (pmu);break ;case MSR_IA32_PEBS_ENABLE : ret =vcpu_get_perf_capabilities (vcpu) &PERF_CAP_PEBS_FORMAT ;
arch/x86/kvm/vmx/vmx.h +12 -0
@@ -91,6 +91,18 @@ union vmx_exit_reason {u32 full; }; +static inline bool intel_pmu_has_perf_global_ctrl (struct kvm_pmu *pmu) +{ +/* +* Architecturally, Intel's SDM states that IA32_PERF_GLOBAL_CTRL is +* supported if "CPUID.0AH: EAX[7:0] > 0", i.e. if the PMU version is +* greater than zero. However, KVM only exposes and emulates the MSR +* to/for the guest if the guest PMU supports at least "Architectural +* Performance Monitoring Version 2". +*/ +return pmu->version >1 ; +} +#define vcpu_to_lbr_desc (vcpu) (&to_vmx(vcpu)->lbr_desc)#define vcpu_to_lbr_records (vcpu) (&to_vmx(vcpu)->lbr_desc.records)