• Christoffer Dall's avatar
    arm/arm64: KVM: Load the timer state when enabling the timer · 4a2c4da1
    Christoffer Dall authored
    After being lazy with saving/restoring the timer state, we defer that
    work to vcpu_load and vcpu_put, which ensure that the timer state is
    loaded on the hardware timers whenever the VCPU runs.
    
    Unfortunately, we are failing to do that the first time vcpu_load()
    runs, because the timer has not yet been enabled at that time.  As long
    as the initialized timer state matches what happens to be in the
    hardware (a disabled timer, because we never leave the timer screaming),
    this does not show up as a problem, but is nevertheless incorrect.
    
    The solution is simple; disable preemption while setting the timer to be
    enabled, and call the timer load function when first enabling the timer.
    Acked-by: default avatarMarc Zyngier <marc.zyngier@arm.com>
    Signed-off-by: default avatarChristoffer Dall <christoffer.dall@linaro.org>
    4a2c4da1
arch_timer.c 25 KB