Message ID | 20230329023944.2488484-1-reijiw@google.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | [v2] KVM: arm64: PMU: Restore the guest's EL0 event counting after migration | expand |
On Tue, 28 Mar 2023 19:39:44 -0700, Reiji Watanabe wrote: > Currently, with VHE, KVM enables the EL0 event counting for the > guest on vcpu_load() or KVM enables it as a part of the PMU > register emulation process, when needed. However, in the migration > case (with VHE), the same handling is lacking, as vPMU register > values that were restored by userspace haven't been propagated yet > (the PMU events haven't been created) at the vcpu load-time on the > first KVM_RUN (kvm_vcpu_pmu_restore_guest() called from vcpu_load() > on the first KVM_RUN won't do anything as events_{guest,host} of > kvm_pmu_events are still zero). > > [...] Applied to kvmarm/fixes, thanks! [1/1] KVM: arm64: PMU: Restore the guest's EL0 event counting after migration https://git.kernel.org/kvmarm/kvmarm/c/f9ea835e99bc -- Best, Oliver
diff --git a/arch/arm64/kvm/pmu-emul.c b/arch/arm64/kvm/pmu-emul.c index 24908400e190..74e0d2b153b5 100644 --- a/arch/arm64/kvm/pmu-emul.c +++ b/arch/arm64/kvm/pmu-emul.c @@ -557,6 +557,7 @@ void kvm_pmu_handle_pmcr(struct kvm_vcpu *vcpu, u64 val) for_each_set_bit(i, &mask, 32) kvm_pmu_set_pmc_value(kvm_vcpu_idx_to_pmc(vcpu, i), 0, true); } + kvm_vcpu_pmu_restore_guest(vcpu); } static bool kvm_pmu_counter_is_enabled(struct kvm_pmc *pmc) diff --git a/arch/arm64/kvm/sys_regs.c b/arch/arm64/kvm/sys_regs.c index 53749d3a0996..425e1e9adae7 100644 --- a/arch/arm64/kvm/sys_regs.c +++ b/arch/arm64/kvm/sys_regs.c @@ -794,7 +794,6 @@ static bool access_pmcr(struct kvm_vcpu *vcpu, struct sys_reg_params *p, if (!kvm_supports_32bit_el0()) val |= ARMV8_PMU_PMCR_LC; kvm_pmu_handle_pmcr(vcpu, val); - kvm_vcpu_pmu_restore_guest(vcpu); } else { /* PMCR.P & PMCR.C are RAZ */ val = __vcpu_sys_reg(vcpu, PMCR_EL0)