Fork of rust-vmm/vhost-device for vmsilo
Find a file
Davíð Steinn Geirsson dac004f86b feat(sound): add per-direction runtime enable/disable with Unix control socket
Always create both output and input virtio-sound streams regardless of
CLI args. Per-direction AtomicBool flags checked in process_io() enforce
enable/disable — disabled output discards samples, disabled input returns
silence. A Unix control socket accepts QUERY/SET commands to toggle flags
at runtime. PipeWire set_active() is called alongside as a cosmetic signal.

- Add StreamEnabled type with shared atomic per-direction flags
- Replace --streams with --initial-streams, add --control-socket CLI arg
- Always create both output and input streams unconditionally
- Enforce enabled flags in process_io() (security boundary)
- Add set_active() to AudioBackend trait with PipeWire implementation
- Add control_socket module with QUERY/SET line protocol
- Wire everything together in start_backend_server and main
2026-03-27 22:30:36 +00:00
.buildkite Revert CROSVM_USE_SYSTEM_* build and CI changes 2025-11-13 14:48:04 +01:00
.cargo Add an xtask crate to generate manpages 2025-04-15 14:25:32 +05:30
.github dependabot: Group updates to reduce noise 2024-11-18 13:50:34 +05:30
packages Use our vhost fork for all crates and add GPU flake package 2026-03-22 19:10:55 +00:00
rust-vmm-ci@112dd9ffb2 build(deps): bump rust-vmm-ci from 65d339d to 112dd9f 2026-03-02 09:27:55 +02:00
staging Use our vhost fork for all crates and add GPU flake package 2026-03-22 19:10:55 +00:00
vhost-device-can Use our vhost fork for all crates and add GPU flake package 2026-03-22 19:10:55 +00:00
vhost-device-console Use our vhost fork for all crates and add GPU flake package 2026-03-22 19:10:55 +00:00
vhost-device-gpio Use our vhost fork for all crates and add GPU flake package 2026-03-22 19:10:55 +00:00
vhost-device-gpu gpu: add Wayland cross-domain support via unified rutabaga backend 2026-03-22 23:20:02 +00:00
vhost-device-i2c Use our vhost fork for all crates and add GPU flake package 2026-03-22 19:10:55 +00:00
vhost-device-input Use our vhost fork for all crates and add GPU flake package 2026-03-22 19:10:55 +00:00
vhost-device-rng Use our vhost fork for all crates and add GPU flake package 2026-03-22 19:10:55 +00:00
vhost-device-scmi Use our vhost fork for all crates and add GPU flake package 2026-03-22 19:10:55 +00:00
vhost-device-scsi Use our vhost fork for all crates and add GPU flake package 2026-03-22 19:10:55 +00:00
vhost-device-sound feat(sound): add per-direction runtime enable/disable with Unix control socket 2026-03-27 22:30:36 +00:00
vhost-device-spi Use our vhost fork for all crates and add GPU flake package 2026-03-22 19:10:55 +00:00
vhost-device-template Use our vhost fork for all crates and add GPU flake package 2026-03-22 19:10:55 +00:00
vhost-device-vsock Use our vhost fork for all crates and add GPU flake package 2026-03-22 19:10:55 +00:00
xtask build(deps): bump the non-rust-vmm group across 2 directories with 29 updates 2026-02-02 10:31:02 +01:00
.gitignore chore: add .worktrees/ to .gitignore 2026-03-27 20:26:54 +00:00
.gitmodules Initial commit 2021-05-26 10:18:40 +03:00
Cargo.lock Use our vhost fork for all crates and add GPU flake package 2026-03-22 19:10:55 +00:00
Cargo.toml Cargo.toml: allow clippy::cloned_ref_to_slice_refs 2025-11-10 10:39:03 +02:00
CODEOWNERS CODEOWNERS: add self as code owner of vhost-device crates 2025-10-31 15:38:38 +02:00
coverage_config_x86_64.json vhost-device-gpu: Refactor vhost-device-gpu 2025-11-13 14:48:04 +01:00
flake.lock nix: add flake with vhost-device-sound package 2026-03-17 20:49:42 +00:00
flake.nix Use our vhost fork for all crates and add GPU flake package 2026-03-22 19:10:55 +00:00
LICENSE-APACHE Initial commit 2021-05-26 10:18:40 +03:00
LICENSE-BSD-3-Clause Add BSD-3-Clause license for the crates 2022-10-27 11:19:40 -06:00
README.md README.md: fix link to GPU docs 2025-09-17 11:03:26 +03:00
rustfmt.toml Move rustfmt.toml to workspace dir 2025-07-18 10:05:07 +02:00

vhost-device

Design

This repository hosts various 'vhost-user' device backends in their own crates. See their individual README.md files for specific information about those crates.

To be included here device backends must:

Here is the list of device backends that we support:

The vhost-device workspace also provides a template to help new developers understand how to write their own vhost-user backend.

Staging Devices

Implementing a proper VirtIO device requires co-ordination between the specification, drivers and backend implementations. As these can all be in flux during development it was decided introducing a staging workspace which would allow developers to work within the main rust-vmm project while clearly marking the backends as not production ready.

To be included in the staging workspace there must at least be:

  • A public proposal to extend the VIRTIO specification
  • A public implementation of a device driver
  • Documentation pointing to the above

More information may be found in its README file.

Here is the list of device backends in staging:

Testing and Code Coverage

Like the wider rust-vmm project we expect new features to come with comprehensive code coverage. However as a multi-binary repository there are cases where avoiding a drop in coverage can be hard and an exception to the approach is allowable. These are:

  • adding a new binary target (aim at least 60% overall coverage)
  • expanding the main function (a small drop is acceptable)

However any new feature added to an existing binary should not cause a drop in coverage. The general aim should be to always improve coverage.

Separation of Concerns

The binaries built by this repository can be run with any VMM which can act as a vhost-user frontend. Typically they have been tested with QEMU although the rust-vmm project does provide a vhost-user frontend crate for rust based VMMs.

While it's possible to implement all parts of the backend inside the vhost-device workspace consideration should be given to separating the VirtQueue handling and response logic to a device crate in the vm-virtio repository. This way a monolithic rust-vmm VMM implementation can reuse the core logic to service the virtio requests directly in the application.

Build dependency

The GPIO crate needs a local installation of libgpiod library to be available. If your distro ships libgpiod >= v2.0, then you should be fine.

Otherwise, you will need to build libgpiod yourself:

git clone --depth 1 --branch v2.0.x https://git.kernel.org/pub/scm/libs/libgpiod/libgpiod.git/
cd libgpiod
./autogen.sh --prefix="$PWD/install/"
make install

In order to inform tools about the build location, you can now set:

export PKG_CONFIG_PATH="<PATH-TO-LIBGPIOD>/install/lib/pkgconfig/"

To prevent setting this in every terminal session, you can also configure cargo to set it automatically.

Xen support

Supporting Xen requires special handling while mapping the guest memory. The vm-memory crate implements xen memory mapping support via a separate feature xen, and this crate uses the same feature name to enable Xen support.

It was decided by the rust-vmm maintainers to keep the interface simple and build the crate for either standard Unix memory mapping or Xen, and not both.

Packaging and distribution

The xtask workspace crate provides support for generating ROFF manual pages.

If the binary you're interested in packaging does not have a manual page generated you are encouraged to file a bug or even contribute the necessary changes by filing a pull request.