diff options
author | Sean Christopherson <seanjc@google.com> | 2023-03-10 16:46:04 -0800 |
---|---|---|
committer | Sean Christopherson <seanjc@google.com> | 2023-04-06 14:58:43 -0700 |
commit | 3a6de51a437fb4d2433f8a99fb59f43866cdbb98 (patch) | |
tree | 1371bd9dfa246de0d6a82829b7c535e6a6eb61c4 /arch/x86/kvm/pmu.c | |
parent | 0094f62c7eaaaf53a011a4e46f9f32e5f3295e8c (diff) | |
download | lwn-3a6de51a437fb4d2433f8a99fb59f43866cdbb98.tar.gz lwn-3a6de51a437fb4d2433f8a99fb59f43866cdbb98.zip |
KVM: x86/pmu: WARN and bug the VM if PMU is refreshed after vCPU has run
Now that KVM disallows changing feature MSRs, i.e. PERF_CAPABILITIES,
after running a vCPU, WARN and bug the VM if the PMU is refreshed after
the vCPU has run.
Note, KVM has disallowed CPUID updates after running a vCPU since commit
feb627e8d6f6 ("KVM: x86: Forbid KVM_SET_CPUID{,2} after KVM_RUN"), i.e.
PERF_CAPABILITIES was the only remaining way to trigger a PMU refresh
after KVM_RUN.
Cc: Like Xu <like.xu.linux@gmail.com>
Link: https://lore.kernel.org/r/20230311004618.920745-8-seanjc@google.com
Signed-off-by: Sean Christopherson <seanjc@google.com>
Diffstat (limited to 'arch/x86/kvm/pmu.c')
-rw-r--r-- | arch/x86/kvm/pmu.c | 3 |
1 files changed, 3 insertions, 0 deletions
diff --git a/arch/x86/kvm/pmu.c b/arch/x86/kvm/pmu.c index 29492c2a0c82..136184fe9e92 100644 --- a/arch/x86/kvm/pmu.c +++ b/arch/x86/kvm/pmu.c @@ -589,6 +589,9 @@ int kvm_pmu_set_msr(struct kvm_vcpu *vcpu, struct msr_data *msr_info) */ void kvm_pmu_refresh(struct kvm_vcpu *vcpu) { + if (KVM_BUG_ON(kvm_vcpu_has_run(vcpu), vcpu->kvm)) + return; + bitmap_zero(vcpu_to_pmu(vcpu)->all_valid_pmc_idx, X86_PMC_IDX_MAX); static_call(kvm_x86_pmu_refresh)(vcpu); } |