summaryrefslogtreecommitdiffstats
path: root/arch/arm64/kvm/pmu-emul.c
diff options
context:
space:
mode:
authorMarc Zyngier <maz@kernel.org>2022-11-13 17:38:21 +0100
committerMarc Zyngier <maz@kernel.org>2022-11-17 16:39:51 +0100
commit001d85bd6c039d3662a4f33a5d212ef3e0438b27 (patch)
tree015ec842d0754c3a0212173e70b6d5b80f0449fb /arch/arm64/kvm/pmu-emul.c
parentKVM: arm64: PMU: Distinguish between 64bit counter and 64bit overflow (diff)
downloadlinux-001d85bd6c039d3662a4f33a5d212ef3e0438b27.tar.xz
linux-001d85bd6c039d3662a4f33a5d212ef3e0438b27.zip
KVM: arm64: PMU: Narrow the overflow checking when required
For 64bit counters that overflow on a 32bit boundary, make sure we only check the bottom 32bit to generate a CHAIN event. Signed-off-by: Marc Zyngier <maz@kernel.org> Reviewed-by: Reiji Watanabe <reijiw@google.com> Link: https://lore.kernel.org/r/20221113163832.3154370-6-maz@kernel.org
Diffstat (limited to 'arch/arm64/kvm/pmu-emul.c')
-rw-r--r--arch/arm64/kvm/pmu-emul.c3
1 files changed, 2 insertions, 1 deletions
diff --git a/arch/arm64/kvm/pmu-emul.c b/arch/arm64/kvm/pmu-emul.c
index d050143326b5..9e6bc7edc4de 100644
--- a/arch/arm64/kvm/pmu-emul.c
+++ b/arch/arm64/kvm/pmu-emul.c
@@ -417,7 +417,8 @@ static void kvm_pmu_counter_increment(struct kvm_vcpu *vcpu,
reg = lower_32_bits(reg);
__vcpu_sys_reg(vcpu, PMEVCNTR0_EL0 + i) = reg;
- if (reg) /* No overflow? move on */
+ /* No overflow? move on */
+ if (kvm_pmu_idx_has_64bit_overflow(vcpu, i) ? reg : lower_32_bits(reg))
continue;
/* Mark overflow */