• Sean Christopherson's avatar
    KVM: arm64: Move vGIC v4 handling for WFI out arch callback hook · 6109c5a6
    Sean Christopherson authored
    Move the put and reload of the vGIC out of the block/unblock callbacks
    and into a dedicated WFI helper.  Functionally, this is nearly a nop as
    the block hook is called at the very beginning of kvm_vcpu_block(), and
    the only code in kvm_vcpu_block() after the unblock hook is to update the
    halt-polling controls, i.e. can only affect the next WFI.
    
    Back when the arch (un)blocking hooks were added by commits 3217f7c2
    ("KVM: Add kvm_arch_vcpu_{un}blocking callbacks) and d35268da
    ("arm/arm64: KVM: arch_timer: Only schedule soft timer on vcpu_block"),
    the hooks were invoked only when KVM was about to "block", i.e. schedule
    out the vCPU.  The use case at the time was to schedule a timer in the
    host based on the earliest timer in the guest in order to wake the
    blocking vCPU when the emulated guest timer fired.  Commit accb99bc
    ("KVM: arm/arm64: Simplify bg_timer programming") reworked the timer
    logic to be even more precise, by waiting until the vCPU was actually
    scheduled out, and so move the timer logic from the (un)blocking hooks to
    vcpu_load/put.
    
    In the meantime, the hooks gained usage for enabling vGIC v4 doorbells in
    commit df9ba959 ("KVM: arm/arm64: GICv4: Use the doorbell interrupt
    as an unblocking source"), and added related logic for the VMCR in commit
    5eeaf10e ("KVM: arm/arm64: Sync ICH_VMCR_EL2 back when about to block").
    
    Finally, commit 07ab0f8d ("KVM: Call kvm_arch_vcpu_blocking early
    into the blocking sequence") hoisted the (un)blocking hooks so that they
    wrapped KVM's halt-polling logic in addition to the core "block" logic.
    
    In other words, the original need for arch hooks to take action _only_
    in the block path is long since gone.
    
    Cc: Oliver Upton <oupton@google.com>
    Cc: Marc Zyngier <maz@kernel.org>
    Signed-off-by: default avatarSean Christopherson <seanjc@google.com>
    Message-Id: <20211009021236.4122790-11-seanjc@google.com>
    Signed-off-by: default avatarPaolo Bonzini <pbonzini@redhat.com>
    6109c5a6
kvm_emulate.h 11.8 KB