• G
    KVM: PPC: Book3S HV: Fix incorrect userspace exit on ioeventfd write · e59d24e6
    Greg Kurz 提交于
    When the guest does an MMIO write which is handled successfully by an
    ioeventfd, ioeventfd_write() returns 0 (success) and
    kvmppc_handle_store() returns EMULATE_DONE.  Then
    kvmppc_emulate_mmio() converts EMULATE_DONE to RESUME_GUEST_NV and
    this causes an exit from the loop in kvmppc_vcpu_run_hv(), causing an
    exit back to userspace with a bogus exit reason code, typically
    causing userspace (e.g. qemu) to crash with a message about an unknown
    exit code.
    
    This adds handling of RESUME_GUEST_NV in kvmppc_vcpu_run_hv() in order
    to fix that.  For generality, we define a helper to check for either
    of the return-to-guest codes we use, RESUME_GUEST and RESUME_GUEST_NV,
    to make it easy to check for either and provide one place to update if
    any other return-to-guest code gets defined in future.
    
    Since it only affects Book3S HV for now, the helper is added to
    the kvm_book3s.h header file.
    
    We use the helper in two places in kvmppc_run_core() as well for
    future-proofing, though we don't see RESUME_GUEST_NV in either place
    at present.
    
    [paulus@samba.org - combined 4 patches into one, rewrote description]
    Suggested-by: NPaul Mackerras <paulus@samba.org>
    Signed-off-by: NAlexey Kardashevskiy <aik@ozlabs.ru>
    Signed-off-by: NGreg Kurz <gkurz@linux.vnet.ibm.com>
    Signed-off-by: NPaul Mackerras <paulus@samba.org>
    e59d24e6
book3s_hv.c 60.4 KB