Skip to content

Comments

Port virtio media simple device as a vhost user media device.#1895

Open
ser-io wants to merge 1 commit intogoogle:mainfrom
ser-io:virtio-media-use-new-SHMEM
Open

Port virtio media simple device as a vhost user media device.#1895
ser-io wants to merge 1 commit intogoogle:mainfrom
ser-io:virtio-media-use-new-SHMEM

Conversation

@ser-io
Copy link
Member

@ser-io ser-io commented Dec 15, 2025

Port virtio media reference device simple_device as a vhost user implementation.

First iteration of simple_device/src/simple_device.rs is the same as in virtio-media upstream https://github.com/chromeos/virtio-media/blob/main/device/src/devices/simple_device.rs.

cargo run --bin simple_device  -- --socket-path /tmp/simple_device.sock
cargo run --features "media" -- --log-level=debug run --cpus 4 --mem 4096 \
  --rwdisk /path/to/debian-12.img \
  --params "root=/dev/vda1" \
  --vhost-user media,socket=/tmp/simple_device.sock \
  /path/to/bzImage

v4l2-compliance -d0 -s

Bug: 445229097

@ser-io ser-io requested review from Databean and jemoreira December 15, 2025 22:34
@jemoreira
Copy link
Member

Port virtio media reference device simple_device as a vhost user implementation.

First iteration of simple_device/src/simple_device.rs is the same as in virtio-media upstream https://github.com/chromeos/virtio-media/blob/main/device/src/devices/simple_device.rs.

Why are you copying this code here instead of depending on it? Would it be possible to contribute changes upstream and only implement the cuttlefish-specific changes here?

@ser-io ser-io requested a review from adelva1984 December 18, 2025 19:05
@ser-io ser-io force-pushed the virtio-media-use-new-SHMEM branch from d42f8bd to db5b139 Compare January 22, 2026 22:14
@ser-io
Copy link
Member Author

ser-io commented Jan 22, 2026

Port virtio media reference device simple_device as a vhost user implementation.
First iteration of simple_device/src/simple_device.rs is the same as in virtio-media upstream https://github.com/chromeos/virtio-media/blob/main/device/src/devices/simple_device.rs.

Why are you copying this code here instead of depending on it? Would it be possible to contribute changes upstream and only implement the cuttlefish-specific changes here?

Removed the copy depending on the upstream implementation.

@ser-io ser-io force-pushed the virtio-media-use-new-SHMEM branch 3 times, most recently from 833efed to fadcf29 Compare January 24, 2026 00:20
serde = { version = "1.0", features = ["derive"] }
serde_json = "1"

[patch.crates-io]
Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I'll remove this once rust-vmm/vhost/pull/339 is merged in.

@ser-io ser-io force-pushed the virtio-media-use-new-SHMEM branch from fadcf29 to 8b2a123 Compare January 24, 2026 00:33
@ser-io ser-io requested review from Databean and jemoreira January 24, 2026 00:34
@ser-io ser-io force-pushed the virtio-media-use-new-SHMEM branch from 8b2a123 to 774f02d Compare January 29, 2026 18:05
Copy link
Member

@Databean Databean left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Some of the comments apply in multiple places, like reducing map_err usage in favor of automatic conversion with From.

use vhost::vhost_user::message::VhostUserProtocolFeatures;
use vhost::vhost_user::message::VhostUserShMemConfig;
use vhost::vhost_user::message::VhostUserVirtioFeatures;
use vhost_user_backend::{VhostUserBackendMut, VringRwLock, VringT};
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

What do you think of using the combined use x::{y, z} syntax more?

It supports multiple levels of nesting, e.g.

use std::{collections::HashMap, convert, io, os::{fd::BorrowedFd, unix::io::AsRawFd}};
...
use log::{error, info};
...

It's even possible to combine everything into a single use statement:

use {
  std::collection::HashMap,
  ...
  libc::{_SC_PAGESIZE, sysconf},
  log::{error, info},
};

The style guide also has some opinions, though they don't seem like strict rules.

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Done.

Preferred using multiple imports rather than a multi-line import and avoided modules within brackets as it makes it complicated to trace back the full import path for a given element.

@ser-io ser-io force-pushed the virtio-media-use-new-SHMEM branch 5 times, most recently from 57c10a8 to cdc74cb Compare February 12, 2026 21:42
Run the device.

```
RUST_LOG=trace cargo run --bin simple_device -- --socket-path /tmp/simple_device.sock

or

RUST_LOG=trace bazel run simple_device:simple_device -- --socket-path /tmp/simple_device.sock
```

Run the VM.

```
cargo run -- --log-level=debug run --cpus 4 --mem 4096 \
  --rwdisk /path/to/debian-12.img \
  --params "root=/dev/vda1" \
  --vhost-user media,socket=/tmp/simple_device.sock \
  /path/to/bzImage

v4l2-compliance -d0 -s
```

Bug: 445229097
@ser-io ser-io force-pushed the virtio-media-use-new-SHMEM branch from cdc74cb to 61f4245 Compare February 12, 2026 22:25
@ser-io ser-io requested a review from Databean February 12, 2026 22:27
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants