No description
Find a file
Noah Gold 078ef31b7a devices: virtio: fix snapshot interrupt supression
When the snapshot & restore of virtqueues was split between frontend &
backend as part of fcf9a630e9, a subtle
& unintentional change was introduced in how VIRTIO_RING_F_EVENT_IDX
operated. On restore, if interrupts were suppressed for a given
virtqueue, they would not only remain supressed, but the index tracking
when the last interrupt was sent would jump to the current used queue
head. This would stall the device because:
* The device was not sending interrupts.
* The driver, which could tell the device to send interrupts, was asleep
  and waiting for an interrupt from the device.

Thus circular waiting is established, and the device stalls.

This CL modifies initialization of split virtqueues to *always* start
with the "last index an interrupt was sent for" aka `last_used` set to
zero. This will generate at most one spurious interrupt per queue when
restoring a snapshot, which is safe and much simpler than plumbing the
actual `last_used` value through the vhost-user protocol.

NOTE: this was a regression which was introduced in
fcf9a630e9.

BUG=b:363280532

TEST=verified that disabling VIRTIO_RING_F_EVENT_IDX fixed the
regression with no code changes. Verified that the regression goes away
once last_used is initialized to zero and VIRTIO_RING_F_EVENT_IDX is
enabled.

Change-Id: If9cacaeed40d7ba1496bd071cc4ffd765f4866de
Reviewed-on: https://chromium-review.googlesource.com/c/crosvm/crosvm/+/6112791
Commit-Queue: Noah Gold <nkgold@google.com>
Reviewed-by: Frederick Mayle <fmayle@google.com>
2024-12-20 13:04:20 -08: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 aarch64, x86_64: add cmdline option to configure PCI mem region 2024-11-22 23:17:50 +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 arch: serial: Use default values in SerialParameters for tests 2024-11-26 19:14:45 +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: windows: named pipes: ignore ERROR_MORE_DATA. 2024-12-11 15:15:36 -08: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 debug prints. 2024-10-31 18:07:12 +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 crosvm_control: add crosvm_client_resume_vm_full api 2024-11-08 20:39:02 +00:00
crosvm_plugin Cargo.toml: avoid "*" versions for external crates 2024-05-22 01:01:42 +00:00
devices devices: virtio: fix snapshot interrupt supression 2024-12-20 13:04:20 -08:00
disk Prepare for thiserror 2.0. 2024-12-13 11:05:25 -08:00
docs/book book: Add a section about pmem-ext2 2024-12-18 02:11:52 -08:00
e2e_tests Windows clippy fixes for Rust 1.81 2024-11-13 00:07:11 +00:00
ext2 Don't depend on zerocopy-derive directly in ext2. 2024-12-11 09:35:56 -08:00
fuse Fix bad indentation in Markdown around lists 2024-09-10 02:05:59 +00:00
fuzz Cargo.toml: upgrade to p9 0.3.1 2024-11-25 18:46:17 +00:00
gpu_display Windows clippy fixes for Rust 1.81 2024-11-13 00:07:11 +00:00
hypervisor hypervisor: use KVM_SET_USER_MEMORY_REGION2 when supported 2024-12-17 15:11:16 -08:00
infra Roll recipe dependencies (trivial). 2024-12-20 10:06:27 -08:00
io_uring Fix clippy::suspicious_open_options warnings 2024-06-10 19:39:47 +00:00
jail seccomp: allow unlinkat for gpu 2024-12-09 17:53:53 +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 x86_64: support running protected VMs with pvmfw 2024-11-25 18:00:07 +00:00
kvm_sys kvm_sys: update bindings for KVM_SET_USER_MEMORY_REGION2 2024-12-17 15:06:43 -08: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 media: ffmpeg: fix undefined behavior in test_avpacket_drop 2024-11-13 00:12:14 +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: clean up transmutes in create_sockaddr() 2024-11-05 00:09:04 +00:00
perfetto Cargo.toml: avoid "*" versions for external crates 2024-05-22 01:01:42 +00:00
power_monitor devices: bat: get power property before first read 2024-10-16 09:16:32 +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 resources: use PciAddress in PCI alloc functions 2024-11-26 22:29:58 +00:00
riscv64 aarch64, x86_64: add cmdline option to configure PCI mem region 2024-11-22 23:17:50 +00:00
rutabaga_gfx rutabaga_gfx/ffi: Add rutabaga_resource_import 2024-12-19 09:01:29 -08: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 base: windows: named pipes: ignore ERROR_MORE_DATA. 2024-12-11 15:15:36 -08:00
swap Exclude a few dead_code instances 2024-11-05 00:16:59 +00:00
system_api Cargo.lock: update protobuf v3.2.0 -> v3.6.0 2024-10-23 20:11:19 +00:00
tests Reformat comments 2024-02-15 23:30:13 +00:00
third_party third_party/minijail: update to detect -Wxor-used-as-pow support 2024-11-20 18:35:06 +00:00
tools Windows clippy fixes for Rust 1.81 2024-11-13 00:07:11 +00:00
tube_transporter Cargo.toml: avoid "*" versions for external crates 2024-05-22 01:01:42 +00:00
usb_sys Windows clippy fixes for Rust 1.81 2024-11-13 00:07:11 +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 virtio: update virtio-media ID to 48 2024-11-08 19:36:37 +00:00
vm_control bat: Notify guest status change when BatConfig is set by commands 2024-12-11 10:38:52 +00:00
vm_memory vm_memory: add MemoryRegionPurpose::Bios 2024-12-12 15:01:33 -08:00
win_audio Windows clippy fixes for Rust 1.81 2024-11-13 00:07:11 +00:00
win_util Replace ::max_value() with ::MAX 2024-07-09 23:26:03 +00:00
x86_64 x86_64: check for too many vCPUs 2024-12-13 10:43:43 -08: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 Don't depend on zerocopy-derive directly in ext2. 2024-12-11 09:35:56 -08:00
Cargo.toml Cargo.toml: upgrade to p9 0.3.1 2024-11-25 18:46:17 +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
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