• Christoffer Dall's avatar
    arm/arm64: KVM: Properly account for guest CPU time · 1b3d546d
    Christoffer Dall authored
    Until now we have been calling kvm_guest_exit after re-enabling
    interrupts when we come back from the guest, but this has the
    unfortunate effect that CPU time accounting done in the context of timer
    interrupts occurring while the guest is running doesn't properly notice
    that the time since the last tick was spent in the guest.
    
    Inspired by the comment in the x86 code, move the kvm_guest_exit() call
    below the local_irq_enable() call and change __kvm_guest_exit() to
    kvm_guest_exit(), because we are now calling this function with
    interrupts enabled.  We have to now explicitly disable preemption and
    not enable preemption before we've called kvm_guest_exit(), since
    otherwise we could be preempted and everything happening before we
    eventually get scheduled again would be accounted for as guest time.
    
    At the same time, move the trace_kvm_exit() call outside of the atomic
    section, since there is no reason for us to do that with interrupts
    disabled.
    Signed-off-by: default avatarChristoffer Dall <christoffer.dall@linaro.org>
    Signed-off-by: default avatarMarc Zyngier <marc.zyngier@arm.com>
    1b3d546d
arm.c 26 KB