Commit 0f87ac23 authored by Paolo Bonzini's avatar Paolo Bonzini

KVM: x86: inline kernel_pio into its sole caller

The caller of kernel_pio already has arguments for most of what kernel_pio
fishes out of vcpu->arch.pio.  This is the first step towards ensuring that
vcpu->arch.pio.* is only used when exiting to userspace.

No functional change intended.
Signed-off-by: default avatarPaolo Bonzini <pbonzini@redhat.com>
parent 7a6177d6
...@@ -7575,37 +7575,31 @@ static int emulator_cmpxchg_emulated(struct x86_emulate_ctxt *ctxt, ...@@ -7575,37 +7575,31 @@ static int emulator_cmpxchg_emulated(struct x86_emulate_ctxt *ctxt,
return emulator_write_emulated(ctxt, addr, new, bytes, exception); return emulator_write_emulated(ctxt, addr, new, bytes, exception);
} }
static int kernel_pio(struct kvm_vcpu *vcpu, void *pd)
{
int r = 0, i;
for (i = 0; i < vcpu->arch.pio.count; i++) {
if (vcpu->arch.pio.in)
r = kvm_io_bus_read(vcpu, KVM_PIO_BUS, vcpu->arch.pio.port,
vcpu->arch.pio.size, pd);
else
r = kvm_io_bus_write(vcpu, KVM_PIO_BUS,
vcpu->arch.pio.port, vcpu->arch.pio.size,
pd);
if (r)
break;
pd += vcpu->arch.pio.size;
}
return r;
}
static int emulator_pio_in_out(struct kvm_vcpu *vcpu, int size, static int emulator_pio_in_out(struct kvm_vcpu *vcpu, int size,
unsigned short port, unsigned short port,
unsigned int count, bool in) unsigned int count, bool in)
{ {
void *data = vcpu->arch.pio_data;
unsigned i;
int r;
vcpu->arch.pio.port = port; vcpu->arch.pio.port = port;
vcpu->arch.pio.in = in; vcpu->arch.pio.in = in;
vcpu->arch.pio.count = count; vcpu->arch.pio.count = count;
vcpu->arch.pio.size = size; vcpu->arch.pio.size = size;
if (!kernel_pio(vcpu, vcpu->arch.pio_data)) for (i = 0; i < count; i++) {
return 1; if (in)
r = kvm_io_bus_read(vcpu, KVM_PIO_BUS, port, size, data);
else
r = kvm_io_bus_write(vcpu, KVM_PIO_BUS, port, size, data);
if (r)
goto userspace_io;
data += size;
}
return 1;
userspace_io:
vcpu->run->exit_reason = KVM_EXIT_IO; vcpu->run->exit_reason = KVM_EXIT_IO;
vcpu->run->io.direction = in ? KVM_EXIT_IO_IN : KVM_EXIT_IO_OUT; vcpu->run->io.direction = in ? KVM_EXIT_IO_IN : KVM_EXIT_IO_OUT;
vcpu->run->io.size = size; vcpu->run->io.size = size;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment