No description
Find a file
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
.cargo Enable clippy for android code 2024-07-09 20:43:44 +00:00
.config dev_container: Pass through NEXTEST_PROFILE 2023-12-14 19:01:30 +00:00
.devcontainer dev_container: Replace better toml extension 2023-07-27 23:37:15 +00:00
.github Cleanup: Remove old, deprecated and no longer used files 2022-09-20 21:05:57 +00:00
.vscode Document feature flags and introduce new feature sets 2022-10-14 20:31:19 +00:00
aarch64 crosvm: simplify gdb setup 2024-10-11 23:28:35 +00:00
acpi_tables Replace ::max_value() with ::MAX 2024-07-09 23:26:03 +00:00
android_audio Refactor android_audio 2024-07-08 20:26:39 +00:00
arch crosvm: simplify gdb setup 2024-10-11 23:28:35 +00:00
argh_helpers Update to syn-2 2023-12-02 00:23:50 +00:00
audio_streams_conformance_test audio_streams_conformance_test: remove unused minijail dep 2024-05-22 21:24:02 +00:00
audio_util clippy: enforce safety block comments 2023-12-14 18:21:54 +00:00
base base: Add call_with_extended_max_files() 2024-09-19 01:22:11 +00:00
base_tokio Avoid clippy::blocks_in_conditions warnings 2024-06-11 00:18:47 +00:00
bit_field Replace ::max_value() with ::MAX 2024-07-09 23:26:03 +00:00
broker_ipc metrics: Switch metrics from Tube to SendTube 2024-04-09 01:38:03 +00:00
common tree-wide: replace data_model::zerocopy_from_*() 2024-03-13 18:03:24 +00:00
cros_async cros_async: remove ?Sized from Default bounds 2024-09-27 19:33:20 +00:00
cros_fdt Fix clippy::assigning_clones lints 2024-06-10 19:33:36 +00:00
cros_tracing Cargo.toml: avoid "*" versions for external crates 2024-05-22 01:01:42 +00:00
cros_tracing_types Cargo.toml: avoid "*" versions for external crates 2024-05-22 01:01:42 +00:00
crosvm_cli devices: vfio: make global container state explicit 2024-06-06 23:31:16 +00:00
crosvm_control vm_control: fix more wildcard re-exports 2024-06-14 22:38:27 +00:00
crosvm_plugin Cargo.toml: avoid "*" versions for external crates 2024-05-22 01:01:42 +00:00
devices hypervisor: pass IoOperation data as slices 2024-10-15 20:21:19 +00:00
disk disk: windows: restrict file sharing 2024-10-07 21:30:55 +00:00
docs/book docs: update gfxstream guest docs 2024-09-23 22:54:07 +00:00
e2e_tests ext2: fix needless borrow clippy warnings 2024-10-02 07:07:17 +00:00
ext2 ext2: fix needless borrow clippy warnings 2024-10-02 07:07:17 +00:00
fuse Fix bad indentation in Markdown around lists 2024-09-10 02:05:59 +00:00
fuzz disk: add option to disable file locking 2024-09-10 22:07:48 +00:00
gpu_display Revert "gpu: Add parameter for a custom cursor file" 2024-09-19 19:20:09 +00:00
hypervisor hypervisor: pass IoOperation data as slices 2024-10-15 20:21:19 +00:00
infra Roll recipe dependencies (trivial). 2024-10-15 14:06:25 +00:00
io_uring Fix clippy::suspicious_open_options warnings 2024-06-10 19:39:47 +00:00
jail ext2: Support xattr that fits inode records 2024-10-01 09:16:02 +00:00
kernel_cmdline kernel_cmdline: remove capacity from Cmdline 2024-09-12 18:42:20 +00:00
kernel_loader kernel_loader: move load_cmdline() to x86_64 2024-09-09 21:32:01 +00:00
kvm hypervisor: kvm: KVM_GET_MSRS writes to its parameter 2024-09-09 23:04:00 +00:00
kvm_sys kvm_sys: Move KVM_PVIOMMU_SET_CONFIG to lib.rs 2024-07-30 18:17:34 +00:00
libcras_stub Cargo.toml: avoid "*" versions for external crates 2024-05-22 01:01:42 +00:00
linux_input_sys Cargo.toml: avoid "*" versions for external crates 2024-05-22 01:01:42 +00:00
logo
media Add aarch64-linux-android target 2024-07-11 17:35:22 +00:00
metrics metrics: add missing features in Cargo.toml 2024-07-03 00:33:08 +00:00
metrics_events metric_events & src: add metric for VcpuShutdown. 2024-05-31 18:25:50 +00:00
net_sys Cargo.toml: avoid "*" versions for external crates 2024-05-22 01:01:42 +00:00
net_util net_util: add test for create_sockaddr() 2024-09-24 19:23:05 +00:00
perfetto Cargo.toml: avoid "*" versions for external crates 2024-05-22 01:01:42 +00:00
power_monitor power_monitor: add powerd client 2024-10-11 05:25:27 +00:00
prebuilts Cargo.toml: avoid "*" versions for external crates 2024-05-22 01:01:42 +00:00
proto_build_tools Cargo.toml: upgrade protobuf 2.x -> 3.x 2023-04-28 19:32:01 +00:00
protos clippy: enforce safety block comments 2023-12-14 18:21:54 +00:00
resources Fix clippy::unnecessary_get_then_check warnings 2024-06-10 20:01:30 +00:00
riscv64 crosvm: simplify gdb setup 2024-10-11 23:28:35 +00:00
rutabaga_gfx rutabaga_gfx: fix observed errors in cross-domain 2024-10-11 19:09:05 +00:00
sandbox Cargo.toml: avoid "*" versions for external crates 2024-05-22 01:01:42 +00:00
serde_keyvalue Cargo.toml: avoid "*" versions for external crates 2024-05-22 01:01:42 +00:00
src hypervisor: pass IoOperation data as slices 2024-10-15 20:21:19 +00:00
swap base: define ioctls as consts rather than functions 2024-06-25 19:17:21 +00:00
system_api system_api: add power_manager bindings and update other bindings 2024-10-10 09:12:27 +00:00
tests Reformat comments 2024-02-15 23:30:13 +00:00
third_party vmm_host: Make vhost_user front-end device monitor sockets 2024-10-15 04:04:41 +00:00
tools infra: Add android-aarch64 builder 2024-07-11 17:43:44 +00:00
tube_transporter Cargo.toml: avoid "*" versions for external crates 2024-05-22 01:01:42 +00:00
usb_sys clippy: enforce safety block comments 2023-12-14 18:21:54 +00:00
usb_util base: define ioctls as consts rather than functions 2024-06-25 19:17:21 +00:00
vendor vendor/generic/metrics: document API methods. 2024-06-04 21:46:46 +00:00
vfio_sys bindgen: update to Linux 6.6 headers 2024-01-09 00:37:43 +00:00
vhost vhost: improve set_vring_addr() validation 2024-10-11 00:56:40 +00:00
virtio_sys devices: add IDs and constants for virtio-media 2024-10-07 17:48:23 +00:00
vm_control vm_control: Add MmapAndRegisterMemory request 2024-09-20 00:21:21 +00:00
vm_memory x86_64: support --unprotected-vm-with-firmware 2024-09-20 19:49:24 +00:00
win_audio win_audio: duplicate the 2 ready Events 2024-09-30 21:43:46 +00:00
win_util Replace ::max_value() with ::MAX 2024-07-09 23:26:03 +00:00
x86_64 crosvm: simplify gdb setup 2024-10-11 23:28:35 +00:00
.dockerignore
.envrc Automatically register tools/ on PATH 2023-03-03 00:33:15 +00:00
.gitattributes config: force lf as line endings 2023-11-07 17:38:58 +00:00
.gitignore Automatically register tools/ on PATH 2023-03-03 00:33:15 +00:00
.gitmodules devices: remove --software-tpm support 2023-10-02 23:28:45 +00:00
.rustfmt.toml rustfmt: wrap comments 2024-02-15 23:30:13 +00:00
ARCHITECTURE.md docs: book: update architecture docs 2023-06-01 22:37:17 +00:00
Cargo.lock power_monitor: add powerd client 2024-10-11 05:25:27 +00:00
Cargo.toml Cargo.toml: reindent all-android features 2024-10-15 18:28:15 +00:00
CONTRIBUTING.md CONTRIBUTING: Fix typo 'Cargo.lock' 2024-07-17 03:47:21 +00:00
DIR_METADATA Add arcvm_gki_cq test plan 2024-08-21 18:24:58 +00:00
LICENSE Update all copyright headers to match new style 2022-09-13 18:41:29 +00:00
mypy.ini
OWNERS owners: remove Paul 2024-09-05 22:51:31 +00:00
OWNERS_COUNCIL OWNERS_COUNCIL: Update council reviewers 2024-05-29 18:36:55 +00:00
PRESUBMIT.cfg Cleanup: Remove old, deprecated and no longer used files 2022-09-20 21:05:57 +00:00
pyproject.toml
README.chromeos.md
README.md Fix remaining Chrome/Chromium OS instances 2023-01-03 22:14:30 +00:00
rust-toolchain rust-toolchain: update to Rust 1.77.2 2024-06-18 18:21:17 +00:00

crosvm - The ChromeOS Virtual Machine Monitor

crosvm is a virtual machine monitor (VMM) based on Linuxs KVM hypervisor, with a focus on simplicity, security, and speed. crosvm is intended to run Linux guests, originally as a security boundary for running native applications on the ChromeOS platform. Compared to QEMU, crosvm doesnt emulate architectures or real hardware, instead concentrating on paravirtualized devices, such as the virtio standard.

crosvm is currently used to run Linux/Android guests on ChromeOS devices.

Logo