Skip to content

Commit 68e61f6

Browse files
committed
KVM: SVM: Emulate PERF_CNTR_GLOBAL_STATUS_SET for PerfMonV2
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>
1 parent e750f85 commit 68e61f6

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
@@ -733,6 +733,7 @@
733733
#define MSR_AMD64_PERF_CNTR_GLOBAL_STATUS 0xc0000300
734734
#define MSR_AMD64_PERF_CNTR_GLOBAL_CTL 0xc0000301
735735
#define MSR_AMD64_PERF_CNTR_GLOBAL_STATUS_CLR 0xc0000302
736+
#define MSR_AMD64_PERF_CNTR_GLOBAL_STATUS_SET 0xc0000303
736737

737738
/* AMD Hardware Feedback Support MSRs */
738739
#define MSR_AMD_WORKLOAD_CLASS_CONFIG 0xc0000500

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
@@ -367,6 +367,7 @@ static const u32 msrs_to_save_pmu[] = {
367367
MSR_AMD64_PERF_CNTR_GLOBAL_CTL,
368368
MSR_AMD64_PERF_CNTR_GLOBAL_STATUS,
369369
MSR_AMD64_PERF_CNTR_GLOBAL_STATUS_CLR,
370+
MSR_AMD64_PERF_CNTR_GLOBAL_STATUS_SET,
370371
};
371372

372373
static u32 msrs_to_save[ARRAY_SIZE(msrs_to_save_base) +
@@ -7353,6 +7354,7 @@ static void kvm_probe_msr_to_save(u32 msr_index)
73537354
case MSR_AMD64_PERF_CNTR_GLOBAL_CTL:
73547355
case MSR_AMD64_PERF_CNTR_GLOBAL_STATUS:
73557356
case MSR_AMD64_PERF_CNTR_GLOBAL_STATUS_CLR:
7357+
case MSR_AMD64_PERF_CNTR_GLOBAL_STATUS_SET:
73567358
if (!kvm_cpu_cap_has(X86_FEATURE_PERFMON_V2))
73577359
return;
73587360
break;

0 commit comments

Comments
 (0)