crosvm/hypervisor/tests
Daniel Verkamp 40920e7278 hypervisor: pass IoOperation data as slices
Previously, the Vcpu handle_io() and handle_mmio() functions used an
IoOperation containing a fixed-length data array to represent a write
and returning a fixed-length data array to represent a read, along with
a separate size field to indicate how much of the fixed-length array
should be read/written.

This change uses Rust slices to represent the I/O data instead:
- Write contains a &[u8] of data to be written.
- Read contains a &mut [u8] to be filled with the read data.

The new IoOperation matches the Bus read()/write() APIs more closely,
and avoids the need for hypervisors and callers to convert between
fixed-size arrays and slices.

The Bus::read() function now always initializes the data slice before
(potentially) calling a device's read() function. This ensures
consistent results even if a device does not always fill out every data
byte (for example, the default BusDevice read() handler that is a no-op)
or if no device is found. This replaces the previous zeroing that would
happen when initializing the read data array to return from handle_fn.
Without this, the data slice may have had stale data from the previous
MMIO/IO exit, depending on the hypervisor implementation.

No functional change intended.

BUG=b:359382839
TEST=tools/dev_container tools/presubmit

Change-Id: Id88ebfa7ece5cc7466c010db2cbde303aeb97bf8
Reviewed-on: https://chromium-review.googlesource.com/c/crosvm/crosvm/+/5913962
Reviewed-by: Vaibhav Nagarnaik <vnagarnaik@google.com>
Reviewed-by: Noah Gold <nkgold@google.com>
Reviewed-by: Frederick Mayle <fmayle@google.com>
Commit-Queue: Daniel Verkamp <dverkamp@chromium.org>
2024-10-15 20:21:19 +00:00
..
kvm hypervisor: x86_64: remove unused get_emulated_cpuid() 2024-09-27 19:10:04 +00:00
dirty_log.rs hypervisor: tests: require windows for haxm 2024-03-08 01:12:21 +00:00
hypervisor_virtualization.rs hypervisor: pass IoOperation data as slices 2024-10-15 20:21:19 +00:00
mmio_and_pio.rs hypervisor: pass IoOperation data as slices 2024-10-15 20:21:19 +00:00
mmio_fetch_memory.rs hypervisor: pass IoOperation data as slices 2024-10-15 20:21:19 +00:00
read_only_memory.rs hypervisor: pass IoOperation data as slices 2024-10-15 20:21:19 +00:00
real_run_addr.rs hypervisor: pass IoOperation data as slices 2024-10-15 20:21:19 +00:00
remove_memory.rs hypervisor: pass IoOperation data as slices 2024-10-15 20:21:19 +00:00
tsc_offsets.rs hypervisor: x86_64: provide single-MSR get/set APIs 2024-04-09 19:37:24 +00:00