• Paolo Bonzini's avatar
    KVM: x86: split the two parts of emulator_pio_in · 3b27de27
    Paolo Bonzini authored
    emulator_pio_in handles both the case where the data is pending in
    vcpu->arch.pio.count, and the case where I/O has to be done via either
    an in-kernel device or a userspace exit.  For SEV-ES we would like
    to split these, to identify clearly the moment at which the
    sev_pio_data is consumed.  To this end, create two different
    functions: __emulator_pio_in fills in vcpu->arch.pio.count, while
    complete_emulator_pio_in clears it and releases vcpu->arch.pio.data.
    
    Because this patch has to be backported, things are left a bit messy.
    kernel_pio() operates on vcpu->arch.pio, which leads to emulator_pio_in()
    having with two calls to complete_emulator_pio_in().  It will be fixed
    in the next release.
    
    While at it, remove the unused void* val argument of emulator_pio_in_out.
    The function currently hardcodes vcpu->arch.pio_data as the
    source/destination buffer, which sucks but will be fixed after the more
    severe SEV-ES buffer overflow.
    
    No functional change intended.
    
    Cc: stable@vger.kernel.org
    Fixes: 7ed9abfe ("KVM: SVM: Support string IO operations for an SEV-ES guest")
    Signed-off-by: default avatarPaolo Bonzini <pbonzini@redhat.com>
    3b27de27
x86.c 325 KB