summaryrefslogtreecommitdiffstats
path: root/arch/x86/kvm
diff options
context:
space:
mode:
authorLuwei Kang <luwei.kang@intel.com>2019-02-18 19:26:08 -0500
committerPaolo Bonzini <pbonzini@redhat.com>2019-04-30 15:32:14 -0400
commitc715eb9fe9027ed118630adb0d59acf36b848d4f (patch)
tree7bffa7b65c4a5c4a1f48900747d93b39b584b4ad /arch/x86/kvm
parent8479e04e7d6b1974629a0f657afa8ec5f17d2e90 (diff)
KVM: x86: Add support of clear Trace_ToPA_PMI status
Let guests clear the Intel PT ToPA PMI status (bit 55 of MSR_CORE_PERF_GLOBAL_OVF_CTRL). Signed-off-by: Luwei Kang <luwei.kang@intel.com> Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
Diffstat (limited to 'arch/x86/kvm')
-rw-r--r--arch/x86/kvm/vmx/pmu_intel.c8
1 files changed, 7 insertions, 1 deletions
diff --git a/arch/x86/kvm/vmx/pmu_intel.c b/arch/x86/kvm/vmx/pmu_intel.c
index 5ab4a364348e..f8502c376b37 100644
--- a/arch/x86/kvm/vmx/pmu_intel.c
+++ b/arch/x86/kvm/vmx/pmu_intel.c
@@ -227,7 +227,7 @@ static int intel_pmu_set_msr(struct kvm_vcpu *vcpu, struct msr_data *msr_info)
227 } 227 }
228 break; 228 break;
229 case MSR_CORE_PERF_GLOBAL_OVF_CTRL: 229 case MSR_CORE_PERF_GLOBAL_OVF_CTRL:
230 if (!(data & (pmu->global_ctrl_mask & ~(3ull<<62)))) { 230 if (!(data & pmu->global_ovf_ctrl_mask)) {
231 if (!msr_info->host_initiated) 231 if (!msr_info->host_initiated)
232 pmu->global_status &= ~data; 232 pmu->global_status &= ~data;
233 pmu->global_ovf_ctrl = data; 233 pmu->global_ovf_ctrl = data;
@@ -297,6 +297,12 @@ static void intel_pmu_refresh(struct kvm_vcpu *vcpu)
297 pmu->global_ctrl = ((1ull << pmu->nr_arch_gp_counters) - 1) | 297 pmu->global_ctrl = ((1ull << pmu->nr_arch_gp_counters) - 1) |
298 (((1ull << pmu->nr_arch_fixed_counters) - 1) << INTEL_PMC_IDX_FIXED); 298 (((1ull << pmu->nr_arch_fixed_counters) - 1) << INTEL_PMC_IDX_FIXED);
299 pmu->global_ctrl_mask = ~pmu->global_ctrl; 299 pmu->global_ctrl_mask = ~pmu->global_ctrl;
300 pmu->global_ovf_ctrl_mask = pmu->global_ctrl_mask
301 & ~(MSR_CORE_PERF_GLOBAL_OVF_CTRL_OVF_BUF |
302 MSR_CORE_PERF_GLOBAL_OVF_CTRL_COND_CHGD);
303 if (kvm_x86_ops->pt_supported())
304 pmu->global_ovf_ctrl_mask &=
305 ~MSR_CORE_PERF_GLOBAL_OVF_CTRL_TRACE_TOPA_PMI;
300 306
301 entry = kvm_find_cpuid_entry(vcpu, 7, 0); 307 entry = kvm_find_cpuid_entry(vcpu, 7, 0);
302 if (entry && 308 if (entry &&