]> git.ipfire.org Git - thirdparty/linux.git/commitdiff
KVM: nSVM: Disable PMU MSR interception as appropriate while running L2
authorSean Christopherson <seanjc@google.com>
Sat, 6 Dec 2025 00:17:08 +0000 (16:17 -0800)
committerSean Christopherson <seanjc@google.com>
Thu, 8 Jan 2026 19:52:15 +0000 (11:52 -0800)
Add MSRs that might be passed through to L1 when running with a mediated
PMU to the nested SVM's set of to-be-merged MSR indices, i.e. disable
interception of PMU MSRs when running L2 if both KVM (L0) and L1 disable
interception.  There is no need for KVM to interpose on such MSR accesses,
e.g. if L1 exposes a mediated PMU (or equivalent) to L2.

Tested-by: Xudong Hao <xudong.hao@intel.com>
Tested-by: Manali Shukla <manali.shukla@amd.com>
Link: https://patch.msgid.link/20251206001720.468579-33-seanjc@google.com
Signed-off-by: Sean Christopherson <seanjc@google.com>
arch/x86/kvm/svm/nested.c

index c81005b245222f81757bd73cca470ccb9216882d..9ca8dad9a7f3cad66e3340776ca49cc4159121ff 100644 (file)
@@ -194,7 +194,7 @@ void recalc_intercepts(struct vcpu_svm *svm)
  * Hardcode the capacity of the array based on the maximum number of _offsets_.
  * MSRs are batched together, so there are fewer offsets than MSRs.
  */
-static int nested_svm_msrpm_merge_offsets[7] __ro_after_init;
+static int nested_svm_msrpm_merge_offsets[10] __ro_after_init;
 static int nested_svm_nr_msrpm_merge_offsets __ro_after_init;
 typedef unsigned long nsvm_msrpm_merge_t;
 
@@ -222,6 +222,22 @@ int __init nested_svm_init_msrpm_merge_offsets(void)
                MSR_IA32_LASTBRANCHTOIP,
                MSR_IA32_LASTINTFROMIP,
                MSR_IA32_LASTINTTOIP,
+
+               MSR_K7_PERFCTR0,
+               MSR_K7_PERFCTR1,
+               MSR_K7_PERFCTR2,
+               MSR_K7_PERFCTR3,
+               MSR_F15H_PERF_CTR0,
+               MSR_F15H_PERF_CTR1,
+               MSR_F15H_PERF_CTR2,
+               MSR_F15H_PERF_CTR3,
+               MSR_F15H_PERF_CTR4,
+               MSR_F15H_PERF_CTR5,
+
+               MSR_AMD64_PERF_CNTR_GLOBAL_CTL,
+               MSR_AMD64_PERF_CNTR_GLOBAL_STATUS,
+               MSR_AMD64_PERF_CNTR_GLOBAL_STATUS_CLR,
+               MSR_AMD64_PERF_CNTR_GLOBAL_STATUS_SET,
        };
        int i, j;