• M
    kvm/x86: rework guest entry logic · b2d2af7e
    Mark Rutland 提交于
    For consistency and clarity, migrate x86 over to the generic helpers for
    guest timing and lockdep/RCU/tracing management, and remove the
    x86-specific helpers.
    
    Prior to this patch, the guest timing was entered in
    kvm_guest_enter_irqoff() (called by svm_vcpu_enter_exit() and
    svm_vcpu_enter_exit()), and was exited by the call to
    vtime_account_guest_exit() within vcpu_enter_guest().
    
    To minimize duplication and to more clearly balance entry and exit, both
    entry and exit of guest timing are placed in vcpu_enter_guest(), using
    the new guest_timing_{enter,exit}_irqoff() helpers. When context
    tracking is used a small amount of additional time will be accounted
    towards guests; tick-based accounting is unnaffected as IRQs are
    disabled at this point and not enabled until after the return from the
    guest.
    
    This also corrects (benign) mis-balanced context tracking accounting
    introduced in commits:
    
      ae95f566 ("KVM: X86: TSCDEADLINE MSR emulation fastpath")
      26efe2fd ("KVM: VMX: Handle preemption timer fastpath")
    
    Where KVM can enter a guest multiple times, calling vtime_guest_enter()
    without a corresponding call to vtime_account_guest_exit(), and with
    vtime_account_system() called when vtime_account_guest() should be used.
    As account_system_time() checks PF_VCPU and calls account_guest_time(),
    this doesn't result in any functional problem, but is unnecessarily
    confusing.
    Signed-off-by: NMark Rutland <mark.rutland@arm.com>
    Acked-by: NPaolo Bonzini <pbonzini@redhat.com>
    Reviewed-by: NNicolas Saenz Julienne <nsaenzju@redhat.com>
    Cc: Borislav Petkov <bp@alien8.de>
    Cc: Dave Hansen <dave.hansen@linux.intel.com>
    Cc: Ingo Molnar <mingo@redhat.com>
    Cc: Jim Mattson <jmattson@google.com>
    Cc: Joerg Roedel <joro@8bytes.org>
    Cc: Sean Christopherson <seanjc@google.com>
    Cc: Thomas Gleixner <tglx@linutronix.de>
    Cc: Vitaly Kuznetsov <vkuznets@redhat.com>
    Cc: Wanpeng Li <wanpengli@tencent.com>
    Message-Id: <20220201132926.3301912-4-mark.rutland@arm.com>
    Signed-off-by: NPaolo Bonzini <pbonzini@redhat.com>
    b2d2af7e
x86.h 12.1 KB