[PATCH 3/9] KVM: arm64: PMU: Only narrow counters that are not 64bit wide
Reiji Watanabe
reijiw at google.com
Tue Aug 23 21:07:28 PDT 2022
Hi Marc,
On Fri, Aug 5, 2022 at 6:58 AM Marc Zyngier <maz at kernel.org> wrote:
>
> The current PMU emulation sometimes narrows counters to 32bit
> if the counter isn't the cycle counter. As this is going to
> change with PMUv3p5 where the counters are all 64bit, only
> perform the narrowing on 32bit counters.
>
> Signed-off-by: Marc Zyngier <maz at kernel.org>
> ---
> arch/arm64/kvm/pmu-emul.c | 17 +++++++++--------
> 1 file changed, 9 insertions(+), 8 deletions(-)
>
> diff --git a/arch/arm64/kvm/pmu-emul.c b/arch/arm64/kvm/pmu-emul.c
> index 9040d3c80096..0ab6f59f433c 100644
> --- a/arch/arm64/kvm/pmu-emul.c
> +++ b/arch/arm64/kvm/pmu-emul.c
> @@ -149,22 +149,22 @@ static void kvm_pmu_release_perf_event(struct kvm_pmc *pmc)
> */
> static void kvm_pmu_stop_counter(struct kvm_vcpu *vcpu, struct kvm_pmc *pmc)
> {
> - u64 counter, reg, val;
> + u64 counter, reg;
>
> if (!pmc->perf_event)
> return;
>
> counter = kvm_pmu_get_counter_value(vcpu, pmc->idx);
>
> - if (pmc->idx == ARMV8_PMU_CYCLE_IDX) {
> + if (pmc->idx == ARMV8_PMU_CYCLE_IDX)
> reg = PMCCNTR_EL0;
> - val = counter;
> - } else {
> + else
> reg = PMEVCNTR0_EL0 + pmc->idx;
> - val = lower_32_bits(counter);
> - }
>
> - __vcpu_sys_reg(vcpu, reg) = val;
> + if (!kvm_pmu_idx_is_64bit(vcpu, pmc->idx))
> + counter = lower_32_bits(counter);
It appears that narrowing the counter to 32bit here is unnecessary
because it is already done by kvm_pmu_get_counter_value().
Thank you,
Reiji
> +
> + __vcpu_sys_reg(vcpu, reg) = counter;
>
> kvm_pmu_release_perf_event(pmc);
> }
> @@ -417,7 +417,8 @@ static void kvm_pmu_counter_increment(struct kvm_vcpu *vcpu,
>
> /* Increment this counter */
> reg = __vcpu_sys_reg(vcpu, PMEVCNTR0_EL0 + i) + 1;
> - reg = lower_32_bits(reg);
> + if (!kvm_pmu_idx_is_64bit(vcpu, i))
> + reg = lower_32_bits(reg);
> __vcpu_sys_reg(vcpu, PMEVCNTR0_EL0 + i) = reg;
>
> if (reg) /* No overflow? move on */
> --
> 2.34.1
>
> _______________________________________________
> kvmarm mailing list
> kvmarm at lists.cs.columbia.edu
> https://lists.cs.columbia.edu/mailman/listinfo/kvmarm
More information about the linux-arm-kernel
mailing list