Skip to content

Commit 2af086f

Browse files
sean-jcgregkh
authored andcommitted
KVM: SVM: Emulate PERF_CNTR_GLOBAL_STATUS_SET for PerfMonV2
commit 68e61f6 upstream. Emulate PERF_CNTR_GLOBAL_STATUS_SET when PerfMonV2 is enumerated to the guest, as the MSR is supposed to exist in all AMD v2 PMUs. Fixes: 4a27718 ("KVM: x86/svm/pmu: Add AMD PerfMonV2 support") Cc: stable@vger.kernel.org Cc: Sandipan Das <sandipan.das@amd.com> Link: https://lore.kernel.org/r/20250711172746.1579423-1-seanjc@google.com Signed-off-by: Sean Christopherson <seanjc@google.com> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
1 parent 801f799 commit 2af086f

File tree

4 files changed

+9
-0
lines changed

4 files changed

+9
-0
lines changed

arch/x86/include/asm/msr-index.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -722,6 +722,7 @@
722722
#define MSR_AMD64_PERF_CNTR_GLOBAL_STATUS 0xc0000300
723723
#define MSR_AMD64_PERF_CNTR_GLOBAL_CTL 0xc0000301
724724
#define MSR_AMD64_PERF_CNTR_GLOBAL_STATUS_CLR 0xc0000302
725+
#define MSR_AMD64_PERF_CNTR_GLOBAL_STATUS_SET 0xc0000303
725726

726727
/* AMD Last Branch Record MSRs */
727728
#define MSR_AMD64_LBR_SELECT 0xc000010e

arch/x86/kvm/pmu.c

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -650,6 +650,7 @@ int kvm_pmu_get_msr(struct kvm_vcpu *vcpu, struct msr_data *msr_info)
650650
msr_info->data = pmu->global_ctrl;
651651
break;
652652
case MSR_AMD64_PERF_CNTR_GLOBAL_STATUS_CLR:
653+
case MSR_AMD64_PERF_CNTR_GLOBAL_STATUS_SET:
653654
case MSR_CORE_PERF_GLOBAL_OVF_CTRL:
654655
msr_info->data = 0;
655656
break;
@@ -711,6 +712,10 @@ int kvm_pmu_set_msr(struct kvm_vcpu *vcpu, struct msr_data *msr_info)
711712
if (!msr_info->host_initiated)
712713
pmu->global_status &= ~data;
713714
break;
715+
case MSR_AMD64_PERF_CNTR_GLOBAL_STATUS_SET:
716+
if (!msr_info->host_initiated)
717+
pmu->global_status |= data & ~pmu->global_status_rsvd;
718+
break;
714719
default:
715720
kvm_pmu_mark_pmc_in_use(vcpu, msr_info->index);
716721
return kvm_pmu_call(set_msr)(vcpu, msr_info);

arch/x86/kvm/svm/pmu.c

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -113,6 +113,7 @@ static bool amd_is_valid_msr(struct kvm_vcpu *vcpu, u32 msr)
113113
case MSR_AMD64_PERF_CNTR_GLOBAL_STATUS:
114114
case MSR_AMD64_PERF_CNTR_GLOBAL_CTL:
115115
case MSR_AMD64_PERF_CNTR_GLOBAL_STATUS_CLR:
116+
case MSR_AMD64_PERF_CNTR_GLOBAL_STATUS_SET:
116117
return pmu->version > 1;
117118
default:
118119
if (msr > MSR_F15H_PERF_CTR5 &&

arch/x86/kvm/x86.c

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -364,6 +364,7 @@ static const u32 msrs_to_save_pmu[] = {
364364
MSR_AMD64_PERF_CNTR_GLOBAL_CTL,
365365
MSR_AMD64_PERF_CNTR_GLOBAL_STATUS,
366366
MSR_AMD64_PERF_CNTR_GLOBAL_STATUS_CLR,
367+
MSR_AMD64_PERF_CNTR_GLOBAL_STATUS_SET,
367368
};
368369

369370
static u32 msrs_to_save[ARRAY_SIZE(msrs_to_save_base) +
@@ -7449,6 +7450,7 @@ static void kvm_probe_msr_to_save(u32 msr_index)
74497450
case MSR_AMD64_PERF_CNTR_GLOBAL_CTL:
74507451
case MSR_AMD64_PERF_CNTR_GLOBAL_STATUS:
74517452
case MSR_AMD64_PERF_CNTR_GLOBAL_STATUS_CLR:
7453+
case MSR_AMD64_PERF_CNTR_GLOBAL_STATUS_SET:
74527454
if (!kvm_cpu_cap_has(X86_FEATURE_PERFMON_V2))
74537455
return;
74547456
break;

0 commit comments

Comments
 (0)