• Oliver Upton's avatar
    KVM: x86: Deliver exception payload on KVM_GET_VCPU_EVENTS · a06230b6
    Oliver Upton authored
    KVM allows the deferral of exception payloads when a vCPU is in guest
    mode to allow the L1 hypervisor to intercept certain events (#PF, #DB)
    before register state has been modified. However, this behavior is
    incompatible with the KVM_{GET,SET}_VCPU_EVENTS ABI, as userspace
    expects register state to have been immediately modified. Userspace may
    opt-in for the payload deferral behavior with the
    KVM_CAP_EXCEPTION_PAYLOAD per-VM capability. As such,
    kvm_multiple_exception() will immediately manipulate guest registers if
    the capability hasn't been requested.
    
    Since the deferral is only necessary if a userspace ioctl were to be
    serviced at the same as a payload bearing exception is recognized, this
    behavior can be relaxed. Instead, opportunistically defer the payload
    from kvm_multiple_exception() and deliver the payload before completing
    a KVM_GET_VCPU_EVENTS ioctl.
    Signed-off-by: default avatarOliver Upton <oupton@google.com>
    Signed-off-by: default avatarPaolo Bonzini <pbonzini@redhat.com>
    a06230b6
x86.c 274 KB