No description
Find a file
Chirantan Ekbote 7b13ef3ea6 cros_asyncv2: Add crate
Based on the previous proposal in [1].

* The Executor is now completely platform-agnostic and only relies on
  the platform to provide a type that implements the `PlatformState`
  trait.
* The crate provides concrete high-level types rather than forcing users
  to deal with trait objects and async-trait.  Currently, only File and
  Event are supported.  Support for timers, sockets, and pipes will be
  added in subsequent changes.
* Each high-level type delegates the implementation to a
  platform-specific type and exists mainly as a place to hold
  documentation and tests.
* On Unix the io_driver module provides async versions of various
  IO-related syscalls, which are used by the platform-specific File and
  Event types to implement the required behavior.
* io-uring support can be disabled at compile time.  When uring support
  is enabled, we make a runtime check to decide whether or not to use
  it.  The actual io-uring driver is currently unimplemented and will be
  added in a subsequent change.

One non-trivial downside of this change is that the futures returned by
the various async methods are !Send and !Sync, which means that they can
only be awaited from the same thread on which they were started.  In
practice this should be fine since current crosvm (and Chrome OS) code
doesn't really make use of sending futures to different threads. This
can also be mitigated by using `Executor::spawn_local` and a
`oneshot::channel` to isolate the !Send future from the outer async
fn (as long as the output of the future is Send). See the crate
documentation and the `outer_future_is_send` test in `src/executor.rs`
for more details.

[1]: https://chromium-review.googlesource.com/c/chromiumos/platform/crosvm/+/3062166

BUG=b:195468578
TEST=unit tests

Change-Id: I1aad0885e67a957149e2ec3b4d9df215d9b20d81
Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform/crosvm/+/3222223
Reviewed-by: Daniel Verkamp <dverkamp@chromium.org>
Tested-by: kokoro <noreply+kokoro@google.com>
Commit-Queue: Chirantan Ekbote <chirantan@chromium.org>
2021-12-09 12:33:02 +00:00
.cargo cleanup: Fix previously disabled clippy checks 2021-11-12 23:23:48 +00:00
.devcontainer Add new dev container and install-deps scripts 2021-10-15 22:12:02 +00:00
.github github: Don't use 80-char rule in pull_request_template 2021-10-29 16:19:21 +00:00
aarch64 Linux: Change root_config from PciConfigArch to PciRoot 2021-12-08 12:30:28 +00:00
acpi_tables x86_64: Add _OSC for pcie hotplug 2021-12-09 00:19:42 +00:00
arch Linux: Change root_config from PciConfigArch to PciRoot 2021-12-08 12:30:28 +00:00
bin Deprecate old dev tooling scripts 2021-11-02 22:23:03 +00:00
bit_field crosvm: fix needless_borrow clippy warning 2021-08-25 23:02:23 +00:00
ci/kokoro kokoro: Add user name / email to commits 2021-12-08 18:50:50 +00:00
common cros_asyncv2: Add crate 2021-12-09 12:33:02 +00:00
crosvm-fuzz Refactoring: Move various general purpose crates to common/ 2021-10-29 22:31:43 +00:00
crosvm_plugin sys_util: Replace unsafe use of iovecs 2021-11-26 14:28:28 +00:00
devices devices: virtio: snd: Support num_{output,input}_streams 2021-12-09 02:05:09 +00:00
disk Handle qcow image backed by a composite disk 2021-11-11 11:08:48 +00:00
docs/book ./tools/presubmit: Parallel execution and use dev container 2021-11-19 20:09:40 +00:00
fuse fuse: Set max_pages in InitOut 2021-11-25 03:56:08 +00:00
gpu_display cleanup: Fix previously disabled clippy checks 2021-11-12 23:23:48 +00:00
hypervisor Enable clippy on more workspace crates 2021-11-15 23:55:42 +00:00
integration_tests Enable clippy on more workspace crates 2021-11-15 23:55:42 +00:00
kernel_cmdline kernel_cmdline: convert to ThisError and sort 2021-09-02 21:00:23 +00:00
kernel_loader Enable clippy on more workspace crates 2021-11-15 23:55:42 +00:00
kvm aarch64: Provide the maximum supported IPA size as the machine type 2021-11-01 14:24:27 +00:00
kvm_sys Refactoring: Move various general purpose crates to common/ 2021-10-29 22:31:43 +00:00
libcras_stub Integrate audio_streams into crosvm, add stub libcras implementation 2021-07-29 05:59:42 +00:00
libcrosvm_control Enable clippy on more workspace crates 2021-11-15 23:55:42 +00:00
libvda enumn: switch to upstream crates.io version 2021-11-15 21:03:25 +00:00
linux_input_sys Refactoring: Move various general purpose crates to common/ 2021-10-29 22:31:43 +00:00
logo README: Use PNG logo image 2021-10-29 01:56:23 +00:00
net_sys Refactoring: Move various general purpose crates to common/ 2021-10-29 22:31:43 +00:00
net_util Refactoring: Move various general purpose crates to common/ 2021-10-29 22:31:43 +00:00
power_monitor Refactoring: Move various general purpose crates to common/ 2021-10-29 22:31:43 +00:00
protos Remove trunks proto from crosvm build 2021-07-31 03:01:21 +00:00
qcow_utils Enable clippy on more workspace crates 2021-11-15 23:55:42 +00:00
resources resources: Release pci slot when vfio pci device is removed 2021-11-19 22:10:15 +00:00
rutabaga_gfx devices: gpu: update protocols 2021-12-01 19:34:00 +00:00
seccomp seccomp: Remove readlink from remaining aarch64 policies 2021-12-03 22:49:04 +00:00
src devices: virtio: snd: Support num_{output,input}_streams 2021-12-09 02:05:09 +00:00
system_api_stub system_api_stub: use 2018 edition of Rust 2021-09-09 06:42:46 +00:00
tests tests/plugins: replace rand_ish use with a counter 2021-07-21 23:28:27 +00:00
third_party vmm_vhost: Remove SlaveReqHandler type parameter in SlaveReqHelper 2021-12-08 14:50:59 +00:00
tools Make aarch64 vm usable for running armhf binaries. 2021-12-09 01:08:45 +00:00
tpm2 crosvm: add license blurb to all files 2019-04-24 15:51:38 -07:00
tpm2-sys Uprev all submodules 2021-10-19 19:12:53 +00:00
usb_sys Refactoring: Move various general purpose crates to common/ 2021-10-29 22:31:43 +00:00
usb_util Enable clippy on more workspace crates 2021-11-15 23:55:42 +00:00
vfio_sys Refactoring: Move various general purpose crates to common/ 2021-10-29 22:31:43 +00:00
vhost devices: vhost: Allow vhost-vsock fd from command-line 2021-11-18 15:19:29 +00:00
virtio_sys Refactoring: Move various general purpose crates to common/ 2021-10-29 22:31:43 +00:00
vm_control devices:vfio-pci: Handle vfio pci device bar reallocation 2021-11-19 22:10:09 +00:00
vm_memory Revert "vm-memory: mlock2(MLOCK_ONFAULT) guest memory for protected VMs" 2021-12-02 11:28:53 +00:00
x86_64 x86_64: Change E820Type from constants to enum 2021-12-09 00:19:44 +00:00
.dockerignore add docker supported builds and tests 2019-05-15 13:36:19 -07:00
.gitignore Add test runner ./tools/run_tests 2021-10-15 22:12:03 +00:00
.gitmodules Switch to submodules based workflow 2021-08-05 18:32:32 +00:00
.rustfmt.toml rustfmt.toml: Use 2018 edition 2021-02-10 11:54:06 +00:00
ARCHITECTURE.md crosvm: Add a note that MemoryMapping does RAII. 2021-11-30 09:24:16 +00:00
Cargo.toml cros_asyncv2: Add crate 2021-12-09 12:33:02 +00:00
CONTRIBUTING.md crosvm: Add link to the chromeos-base/crosvm topic. 2021-11-30 09:23:55 +00:00
LICENSE add LICENSE and README 2017-04-17 14:06:21 -07:00
navbar.md navbar: Update navbar contents 2021-10-29 01:56:24 +00:00
OWNERS OWNERS: add dtor@ 2021-12-06 20:36:52 +00:00
README.chromeos Add documentation for ChromeOS integration 2021-12-08 18:50:50 +00:00
README.md crosvm: Sprinkle notes on API search. 2021-11-08 07:21:20 +00:00
run_tests Deprecate old dev tooling scripts 2021-11-02 22:23:03 +00:00
rust-toolchain Uprev to rust 1.55.0 2021-10-19 19:12:52 +00:00
setup_cros_cargo.sh Deprecate old dev tooling scripts 2021-11-02 22:23:03 +00:00
test_all Deprecate old dev tooling scripts 2021-11-02 22:23:03 +00:00
unblocked_terms.txt unblocked_terms.txt: clean up trivial cases 2021-04-26 20:32:38 +00:00

crosvm - The Chrome OS 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 Chrome OS 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 Chrome OS devices.

Logo