KVM: arm/arm64: timer: Add active state caching
authorMarc Zyngier <marc.zyngier@arm.com>
Fri, 29 Jan 2016 19:04:48 +0000 (19:04 +0000)
committerMarc Zyngier <marc.zyngier@arm.com>
Mon, 29 Feb 2016 18:34:22 +0000 (18:34 +0000)
commit9b4a3004439d5be680faf41f4267968ca11bb9f6
tree7d0105f0da12af41b04a23dd4e4f65066d80d6f0
parentd06a5440a02cf8ff67b1cd4ee75a30b1b1c66cff
KVM: arm/arm64: timer: Add active state caching

Programming the active state in the (re)distributor can be an
expensive operation so it makes some sense to try and reduce
the number of accesses as much as possible. So far, we
program the active state on each VM entry, but there is some
opportunity to do less.

An obvious solution is to cache the active state in memory,
and only program it in the HW when conditions change. But
because the HW can also change things under our feet (the active
state can transition from 1 to 0 when the guest does an EOI),
some precautions have to be taken, which amount to only caching
an "inactive" state, and always programing it otherwise.

With this in place, we observe a reduction of around 700 cycles
on a 2GHz GICv2 platform for a NULL hypercall.

Reviewed-by: Christoffer Dall <christoffer.dall@linaro.org>
Signed-off-by: Marc Zyngier <marc.zyngier@arm.com>
arch/arm/kvm/arm.c
include/kvm/arm_arch_timer.h
virt/kvm/arm/arch_timer.c