• Sean Christopherson's avatar
    KVM: x86: Unconditionally enable irqs in guest context · d7a08882
    Sean Christopherson authored
    On VMX, KVM currently does not re-enable irqs until after it has exited
    the guest context.  As a result, a tick that fires in the window between
    VM-Exit and guest_exit_irqoff() will be accounted as system time.  While
    said window is relatively small, it's large enough to be problematic in
    some configurations, e.g. if VM-Exits are consistently occurring a hair
    earlier than the tick irq.
    
    Intentionally toggle irqs back off so that guest_exit_irqoff() can be
    used in lieu of guest_exit() in order to avoid the save/restore of flags
    in guest_exit().  On my Haswell system, "nop; cli; sti" is ~6 cycles,
    versus ~28 cycles for "pushf; pop <reg>; cli; push <reg>; popf".
    
    Fixes: f2485b3e ("KVM: x86: use guest_exit_irqoff")
    Reported-by: default avatarWei Yang <w90p710@gmail.com>
    Signed-off-by: default avatarSean Christopherson <sean.j.christopherson@intel.com>
    Signed-off-by: default avatarPaolo Bonzini <pbonzini@redhat.com>
    d7a08882
svm.c 186 KB