mirror of
https://chromium.googlesource.com/crosvm/crosvm
synced 2024-11-24 12:34:31 +00:00
40920e7278
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> |
||
---|---|---|
.. | ||
kvm | ||
dirty_log.rs | ||
hypervisor_virtualization.rs | ||
mmio_and_pio.rs | ||
mmio_fetch_memory.rs | ||
read_only_memory.rs | ||
real_run_addr.rs | ||
remove_memory.rs | ||
tsc_offsets.rs |