mirror of
https://chromium.googlesource.com/crosvm/crosvm
synced 2024-11-28 17:44:10 +00:00
No description
db749f37d6
msix vector table is stored in mmio, its contents is saved and restored by pci bus dirver during device PM. With vfio-pci device, msix is virtualized and guest pci bus driver could maintain virtualized msix vector table. But vfio-pci device maybe poweroff and the physical msix vector table will be lost, crosvm couldn't maintain physical msix vector table during vfio-pci device suspend and resume. kernel vfio-pci set msix message for each enabled vector which is specified in VFIO_DEVICE_SET_IRQS() ioctl, this commit use this to restore physical msix vector table during vfio-pci device's resume. __pci_restore_msix_state() is called during device resume, this function set enable and maskall bit first, then restore msix vetor table, finally set enable bit and clear maskall bit. so when enable and maskall bit is set, virtualized msix could be disabled. When enable is set and maskall is cleared, vituallized msix will be enabled through VFIO_DEVICE_SET_IRQS() ioctl, and kernel restores vfio-pci device's physical msix table. BUG=b:185084350 TEST=verify vfio-pci device's suspend and resume function in vm, this device should have msix capability like TBT controller. Change-Id: I0a9e91874a9d1ec4b0bb9ff655b83a293daa6865 Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform/crosvm/+/3291758 Commit-Queue: Daniel Verkamp <dverkamp@chromium.org> Tested-by: kokoro <noreply+kokoro@google.com> Reviewed-by: Daniel Verkamp <dverkamp@chromium.org> |
||
---|---|---|
.cargo | ||
.devcontainer | ||
.github | ||
aarch64 | ||
acpi_tables | ||
arch | ||
bin | ||
bit_field | ||
ci/kokoro | ||
common | ||
crosvm-fuzz | ||
crosvm_plugin | ||
devices | ||
disk | ||
docs/book | ||
fuse | ||
gpu_display | ||
hypervisor | ||
integration_tests | ||
kernel_cmdline | ||
kernel_loader | ||
kvm | ||
kvm_sys | ||
libcras_stub | ||
libcrosvm_control | ||
libvda | ||
linux_input_sys | ||
logo | ||
net_sys | ||
net_util | ||
power_monitor | ||
protos | ||
qcow_utils | ||
resources | ||
rutabaga_gfx | ||
seccomp | ||
src | ||
system_api_stub | ||
tests | ||
third_party | ||
tools | ||
tpm2 | ||
tpm2-sys | ||
usb_sys | ||
usb_util | ||
vfio_sys | ||
vhost | ||
virtio_sys | ||
vm_control | ||
vm_memory | ||
x86_64 | ||
.dockerignore | ||
.gitignore | ||
.gitmodules | ||
.rustfmt.toml | ||
ARCHITECTURE.md | ||
Cargo.toml | ||
CONTRIBUTING.md | ||
LICENSE | ||
navbar.md | ||
OWNERS | ||
README.md | ||
run_tests | ||
rust-toolchain | ||
setup_cros_cargo.sh | ||
test_all | ||
unblocked_terms.txt |
crosvm - The Chrome OS Virtual Machine Monitor
crosvm is a virtual machine monitor (VMM) based on Linux’s 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 Chrome OS platform. Compared to QEMU, crosvm doesn’t 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 Chrome OS devices.
- Documentation
- Source code
- API doc, useful for searching API.
- For contribution, see the contributor guide. Mirror repository is available at GitHub for your convenience, but we don't accept bug reports or pull requests there.
- Issue tracker