Lines Matching full:io

37 static void guest_code(struct kvm_coalesced_io *io)
47 for (i = 0; i < io->ring_size - 1; i++) {
50 outl(io->pio_port, io->pio_port + i);
53 WRITE_ONCE(*io->mmio, io->mmio_gpa + i);
57 outl(io->pio_port, io->pio_port + i);
60 WRITE_ONCE(*io->mmio, io->mmio_gpa + i);
64 WRITE_ONCE(*io->mmio, io->mmio_gpa + i);
66 outl(io->pio_port, io->pio_port + i);
72 struct kvm_coalesced_io *io,
77 struct kvm_coalesced_mmio_ring *ring = io->ring;
91 pio_value = *(uint32_t *)((void *)run + run->io.data_offset);
96 run->mmio.phys_addr == io->mmio_gpa && run->mmio.len == 8 &&
97 *(uint64_t *)run->mmio.data == io->mmio_gpa + io->ring_size - 1)) ||
98 (want_pio && (run->exit_reason == KVM_EXIT_IO && run->io.port == io->pio_port &&
99 run->io.direction == KVM_EXIT_IO_OUT && run->io.count == 1 &&
100 pio_value == io->pio_port + io->ring_size - 1)),
105 want_pio ? (unsigned long long)io->pio_port : io->mmio_gpa,
106 (want_pio ? io->pio_port : io->mmio_gpa) + io->ring_size - 1, run->exit_reason,
109 run->io.port, run->io.direction, run->io.size, run->io.count, pio_value);
113 struct kvm_coalesced_io *io,
117 struct kvm_coalesced_mmio_ring *ring = io->ring;
120 vcpu_run_and_verify_io_exit(vcpu, io, ring_start, expected_exit);
122 TEST_ASSERT((ring->last + 1) % io->ring_size == ring->first,
124 ring->first, ring->last, io->ring_size, ring_start);
126 for (i = 0; i < io->ring_size - 1; i++) {
127 uint32_t idx = (ring->first + i) % io->ring_size;
132 TEST_ASSERT(entry->phys_addr == io->pio_port &&
134 *(uint32_t *)entry->data == io->pio_port + i,
136 io->pio_port, io->pio_port + i, i,
141 TEST_ASSERT(entry->phys_addr == io->mmio_gpa &&
144 io->mmio_gpa, io->mmio_gpa + i, i,
151 struct kvm_coalesced_io *io, uint32_t ring_start)
153 struct kvm_coalesced_mmio_ring *ring = io->ring;
155 kvm_vm_register_coalesced_io(vcpu->vm, io->mmio_gpa, 8, false /* pio */);
157 kvm_vm_register_coalesced_io(vcpu->vm, io->pio_port, 8, true /* pio */);
160 vcpu_run_and_verify_coalesced_io(vcpu, io, ring_start, KVM_EXIT_MMIO);
162 vcpu_run_and_verify_coalesced_io(vcpu, io, ring_start, KVM_EXIT_IO);
177 kvm_vm_unregister_coalesced_io(vcpu->vm, io->mmio_gpa, 8, false /* pio */);
178 vcpu_run_and_verify_io_exit(vcpu, io, ring_start, KVM_EXIT_MMIO);
181 kvm_vm_unregister_coalesced_io(vcpu->vm, io->pio_port, 8, true /* pio */);
182 vcpu_run_and_verify_io_exit(vcpu, io, ring_start, KVM_EXIT_IO);