• Sean Christopherson's avatar
    KVM: Don't actually set a request when evicting vCPUs for GFN cache invd · df06dae3
    Sean Christopherson authored
    Don't actually set a request bit in vcpu->requests when making a request
    purely to force a vCPU to exit the guest.  Logging a request but not
    actually consuming it would cause the vCPU to get stuck in an infinite
    loop during KVM_RUN because KVM would see the pending request and bail
    from VM-Enter to service the request.
    
    Note, it's currently impossible for KVM to set KVM_REQ_GPC_INVALIDATE as
    nothing in KVM is wired up to set guest_uses_pa=true.  But, it'd be all
    too easy for arch code to introduce use of kvm_gfn_to_pfn_cache_init()
    without implementing handling of the request, especially since getting
    test coverage of MMU notifier interaction with specific KVM features
    usually requires a directed test.
    
    Opportunistically rename gfn_to_pfn_cache_invalidate_start()'s wake_vcpus
    to evict_vcpus.  The purpose of the request is to get vCPUs out of guest
    mode, it's supposed to _avoid_ waking vCPUs that are blocking.
    
    Opportunistically rename KVM_REQ_GPC_INVALIDATE to be more specific as to
    what it wants to accomplish, and to genericize the name so that it can
    used for similar but unrelated scenarios, should they arise in the future.
    Add a comment and documentation to explain why the "no action" request
    exists.
    
    Add compile-time assertions to help detect improper usage.  Use the inner
    assertless helper in the one s390 path that makes requests without a
    hardcoded request.
    
    Cc: David Woodhouse <dwmw@amazon.co.uk>
    Signed-off-by: default avatarSean Christopherson <seanjc@google.com>
    Message-Id: <20220223165302.3205276-1-seanjc@google.com>
    Signed-off-by: default avatarPaolo Bonzini <pbonzini@redhat.com>
    df06dae3
vcpu-requests.rst 13.6 KB