From 91a625603f8ebea52328f0a54cc5c4eeb59deb77 Mon Sep 17 00:00:00 2001 From: Wenyu Huang Date: Mon, 21 Apr 2025 11:01:13 -0400 Subject: [PATCH] chore: bump virtio-queue and some related dependencies virtio-queue v0.15 introduces a new Descriptor API supporting both split and packed virtqueue. Update our dependencies and code to work with the new version of the crate, including updating vhost-user-backend and virtio-vsock. Updates `vhost-user-backend` from 0.18.0 to 0.19.0 - [Release notes](https://github.com/rust-vmm/vhost/releases) - [Commits](rust-vmm/vhost@vhost-user-backend-v0.18.0...vhost-user-backend-v0.19.0) Updates `virtio-queue` from 0.14.0 to 0.15.0 - [Release notes](https://github.com/rust-vmm/vm-virtio/releases) - [Commits](rust-vmm/vm-virtio@virtio-queue-v0.14.0...virtio-queue-v0.15.0) Updates `virtio-vsock` from 0.8.0 to 0.9.0 - [Release notes](https://github.com/rust-vmm/vm-virtio/releases) - [Commits](rust-vmm/vm-virtio@virtio-vsock-v0.8.0...virtio-vsock-v0.9.0) Signed-off-by: Wenyu Huang --- Cargo.lock | 56 ++++---- staging/Cargo.lock | 28 ++-- staging/vhost-device-video/Cargo.toml | 6 +- .../src/vhu_video_thread.rs | 18 ++- staging/vhost-device-video/src/video.rs | 13 +- vhost-device-can/Cargo.toml | 6 +- vhost-device-can/src/vhu_can.rs | 13 +- vhost-device-console/Cargo.toml | 6 +- vhost-device-console/src/vhu_console.rs | 13 +- vhost-device-gpio/Cargo.toml | 6 +- vhost-device-gpio/src/vhu_gpio.rs | 21 ++- vhost-device-gpu/Cargo.toml | 6 +- vhost-device-gpu/src/device.rs | 18 ++- vhost-device-gpu/src/protocol.rs | 12 +- vhost-device-i2c/Cargo.toml | 6 +- vhost-device-i2c/src/vhu_i2c.rs | 26 ++-- vhost-device-input/Cargo.toml | 6 +- vhost-device-input/src/vhu_input.rs | 6 +- vhost-device-rng/Cargo.toml | 6 +- vhost-device-rng/src/vhu_rng.rs | 13 +- vhost-device-scmi/Cargo.toml | 6 +- vhost-device-scmi/src/vhu_scmi.rs | 26 ++-- vhost-device-scsi/Cargo.toml | 4 +- vhost-device-scsi/src/vhu_scsi.rs | 14 +- vhost-device-scsi/src/virtio.rs | 6 +- vhost-device-sound/Cargo.toml | 6 +- vhost-device-sound/src/device.rs | 54 ++++++-- vhost-device-sound/src/stream.rs | 19 ++- vhost-device-spi/Cargo.toml | 6 +- vhost-device-spi/src/vhu_spi.rs | 123 +++++++++--------- vhost-device-template/Cargo.toml | 6 +- vhost-device-template/src/vhu_foo.rs | 26 +++- vhost-device-vsock/Cargo.toml | 8 +- vhost-device-vsock/src/vsock_conn.rs | 26 +++- 34 files changed, 377 insertions(+), 238 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index dce4aeb..713bcdd 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1925,7 +1925,7 @@ dependencies = [ "libc", "uuid", "vm-memory", - "vmm-sys-util 0.14.0", + "vmm-sys-util", ] [[package]] @@ -1944,7 +1944,7 @@ dependencies = [ "virtio-bindings", "virtio-queue", "vm-memory", - "vmm-sys-util 0.14.0", + "vmm-sys-util", ] [[package]] @@ -1965,7 +1965,7 @@ dependencies = [ "virtio-bindings", "virtio-queue", "vm-memory", - "vmm-sys-util 0.14.0", + "vmm-sys-util", ] [[package]] @@ -1984,7 +1984,7 @@ dependencies = [ "virtio-bindings", "virtio-queue", "vm-memory", - "vmm-sys-util 0.14.0", + "vmm-sys-util", ] [[package]] @@ -2007,7 +2007,7 @@ dependencies = [ "virtio-bindings", "virtio-queue", "vm-memory", - "vmm-sys-util 0.14.0", + "vmm-sys-util", ] [[package]] @@ -2025,7 +2025,7 @@ dependencies = [ "virtio-bindings", "virtio-queue", "vm-memory", - "vmm-sys-util 0.14.0", + "vmm-sys-util", ] [[package]] @@ -2048,7 +2048,7 @@ dependencies = [ "virtio-bindings", "virtio-queue", "vm-memory", - "vmm-sys-util 0.14.0", + "vmm-sys-util", ] [[package]] @@ -2069,7 +2069,7 @@ dependencies = [ "virtio-bindings", "virtio-queue", "vm-memory", - "vmm-sys-util 0.14.0", + "vmm-sys-util", ] [[package]] @@ -2087,7 +2087,7 @@ dependencies = [ "virtio-bindings", "virtio-queue", "vm-memory", - "vmm-sys-util 0.14.0", + "vmm-sys-util", ] [[package]] @@ -2107,7 +2107,7 @@ dependencies = [ "virtio-bindings", "virtio-queue", "vm-memory", - "vmm-sys-util 0.14.0", + "vmm-sys-util", ] [[package]] @@ -2129,7 +2129,7 @@ dependencies = [ "virtio-bindings", "virtio-queue", "vm-memory", - "vmm-sys-util 0.14.0", + "vmm-sys-util", ] [[package]] @@ -2148,7 +2148,7 @@ dependencies = [ "virtio-bindings", "virtio-queue", "vm-memory", - "vmm-sys-util 0.14.0", + "vmm-sys-util", ] [[package]] @@ -2166,7 +2166,7 @@ dependencies = [ "virtio-bindings", "virtio-queue", "vm-memory", - "vmm-sys-util 0.14.0", + "vmm-sys-util", ] [[package]] @@ -2190,15 +2190,15 @@ dependencies = [ "virtio-queue", "virtio-vsock", "vm-memory", - "vmm-sys-util 0.14.0", + "vmm-sys-util", "vsock", ] [[package]] name = "vhost-user-backend" -version = "0.18.0" +version = "0.19.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a76e8acbdaf760efa37dbd414870c81717a65a64d3351b1a93d03bc249a3e987" +checksum = "c8cc4fc4d33a521e1d912b61da986aba6f04c8b67cc1af0adaac21da3ce59fa6" dependencies = [ "libc", "log", @@ -2206,7 +2206,7 @@ dependencies = [ "virtio-bindings", "virtio-queue", "vm-memory", - "vmm-sys-util 0.14.0", + "vmm-sys-util", ] [[package]] @@ -2220,21 +2220,21 @@ dependencies = [ [[package]] name = "virtio-queue" -version = "0.14.0" +version = "0.15.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "872e2f3fbd70a7e6f01689720cce3d5c2c5efe52b484dd07b674246ada0e9a8d" +checksum = "efd3ef6079fc0de4d687a6ff364a5f5633f3aabcd29982ef866bc49fba0349a4" dependencies = [ "log", "virtio-bindings", "vm-memory", - "vmm-sys-util 0.12.1", + "vmm-sys-util", ] [[package]] name = "virtio-vsock" -version = "0.8.0" +version = "0.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4118ce26599dc8a238c6ee795d90250c88d8ebfece9e65c1f01dec6e4e2aeb67" +checksum = "cf6ab06b1894d6c4198de00df8af8715d080d3c7c6b82ea570ad78642990d89b" dependencies = [ "virtio-bindings", "virtio-queue", @@ -2251,20 +2251,10 @@ dependencies = [ "bitflags 2.9.1", "libc", "thiserror 1.0.69", - "vmm-sys-util 0.14.0", + "vmm-sys-util", "winapi", ] -[[package]] -name = "vmm-sys-util" -version = "0.12.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1d1435039746e20da4f8d507a72ee1b916f7b4b05af7a91c093d2c6561934ede" -dependencies = [ - "bitflags 1.3.2", - "libc", -] - [[package]] name = "vmm-sys-util" version = "0.14.0" diff --git a/staging/Cargo.lock b/staging/Cargo.lock index 51abb4d..8ef1787 100644 --- a/staging/Cargo.lock +++ b/staging/Cargo.lock @@ -903,7 +903,7 @@ dependencies = [ "libc", "uuid", "vm-memory", - "vmm-sys-util 0.14.0", + "vmm-sys-util", ] [[package]] @@ -928,14 +928,14 @@ dependencies = [ "virtio-bindings", "virtio-queue", "vm-memory", - "vmm-sys-util 0.14.0", + "vmm-sys-util", ] [[package]] name = "vhost-user-backend" -version = "0.18.0" +version = "0.19.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a76e8acbdaf760efa37dbd414870c81717a65a64d3351b1a93d03bc249a3e987" +checksum = "c8cc4fc4d33a521e1d912b61da986aba6f04c8b67cc1af0adaac21da3ce59fa6" dependencies = [ "libc", "log", @@ -943,7 +943,7 @@ dependencies = [ "virtio-bindings", "virtio-queue", "vm-memory", - "vmm-sys-util 0.14.0", + "vmm-sys-util", ] [[package]] @@ -957,14 +957,14 @@ dependencies = [ [[package]] name = "virtio-queue" -version = "0.14.0" +version = "0.15.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "872e2f3fbd70a7e6f01689720cce3d5c2c5efe52b484dd07b674246ada0e9a8d" +checksum = "efd3ef6079fc0de4d687a6ff364a5f5633f3aabcd29982ef866bc49fba0349a4" dependencies = [ "log", "virtio-bindings", "vm-memory", - "vmm-sys-util 0.12.1", + "vmm-sys-util", ] [[package]] @@ -977,20 +977,10 @@ dependencies = [ "bitflags 2.9.1", "libc", "thiserror 1.0.69", - "vmm-sys-util 0.14.0", + "vmm-sys-util", "winapi", ] -[[package]] -name = "vmm-sys-util" -version = "0.12.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1d1435039746e20da4f8d507a72ee1b916f7b4b05af7a91c093d2c6561934ede" -dependencies = [ - "bitflags 1.3.2", - "libc", -] - [[package]] name = "vmm-sys-util" version = "0.14.0" diff --git a/staging/vhost-device-video/Cargo.toml b/staging/vhost-device-video/Cargo.toml index f663167..d775b1c 100644 --- a/staging/vhost-device-video/Cargo.toml +++ b/staging/vhost-device-video/Cargo.toml @@ -27,9 +27,9 @@ libc = "0.2.172" thiserror = "2.0" futures-executor = { version = "0.3", features = ["thread-pool"] } vhost = { version = "0.14", features = ["vhost-user-backend"] } -vhost-user-backend = "0.18" +vhost-user-backend = "0.19" virtio-bindings = "0.2.5" -virtio-queue = "0.14" +virtio-queue = "0.15" vm-memory = "0.16.0" vmm-sys-util = "0.14" v4l2r = { git = "https://github.com/Gnurou/v4l2r", rev = "110fd77", optional = true } @@ -38,5 +38,5 @@ v4l2r = { git = "https://github.com/Gnurou/v4l2r", rev = "110fd77", optional = assert_matches = "1.5" rstest = "0.25.0" tempfile = "3.20.0" -virtio-queue = { version = "0.14", features = ["test-utils"] } +virtio-queue = { version = "0.15", features = ["test-utils"] } vm-memory = { version = "0.16.0", features = ["backend-mmap", "backend-atomic"] } diff --git a/staging/vhost-device-video/src/vhu_video_thread.rs b/staging/vhost-device-video/src/vhu_video_thread.rs index ffa55bc..cae2263 100644 --- a/staging/vhost-device-video/src/vhu_video_thread.rs +++ b/staging/vhost-device-video/src/vhu_video_thread.rs @@ -11,7 +11,7 @@ use std::{ use futures_executor::{ThreadPool, ThreadPoolBuilder}; use log::{debug, warn}; use vhost_user_backend::{VringEpollHandler, VringRwLock, VringT}; -use virtio_queue::{Descriptor, QueueOwnedT}; +use virtio_queue::{desc::split::Descriptor as SplitDescriptor, QueueOwnedT}; use vm_memory::{ ByteValued, Bytes, GuestAddress, GuestAddressSpace, GuestMemory, GuestMemoryAtomic, GuestMemoryMmap, @@ -198,7 +198,7 @@ pub(crate) struct VhostUserVideoThread { fn write_descriptor_data( resp: T, - desc_response: &Descriptor, + desc_response: &SplitDescriptor, desc_chain: &VideoDescriptorChain, vring: &VringRwLock, ) { @@ -577,7 +577,7 @@ mod tests { use rstest::*; use tempfile::TempDir; use virtio_bindings::virtio_ring::{VRING_DESC_F_NEXT, VRING_DESC_F_WRITE}; - use virtio_queue::{mock::MockSplitQueue, Queue}; + use virtio_queue::{desc::RawDescriptor, mock::MockSplitQueue, Queue}; use vm_memory::{Address, GuestAddress}; use vmm_sys_util::eventfd::EventFd; @@ -605,14 +605,18 @@ mod tests { // Descriptor for the video request let desc_request = - Descriptor::new(next_addr, request_size, VRING_DESC_F_NEXT as u16, index + 1); + SplitDescriptor::new(next_addr, request_size, VRING_DESC_F_NEXT as u16, index + 1); mem.write_slice(request, desc_request.addr()).unwrap(); - vq.desc_table().store(index, desc_request).unwrap(); + vq.desc_table() + .store(index, RawDescriptor::from(desc_request)) + .unwrap(); next_addr += u64::from(desc_request.len()); index += 1; // Descriptor for the video response - let desc_response = Descriptor::new(next_addr, 0x100, VRING_DESC_F_WRITE as u16, 0); - vq.desc_table().store(index, desc_response).unwrap(); + let desc_response = SplitDescriptor::new(next_addr, 0x100, VRING_DESC_F_WRITE as u16, 0); + vq.desc_table() + .store(index, RawDescriptor::from(desc_response)) + .unwrap(); // Put the descriptor index 0 in the first available ring position. mem.write_obj(0u16, vq.avail_addr().unchecked_add(4)) diff --git a/staging/vhost-device-video/src/video.rs b/staging/vhost-device-video/src/video.rs index f3e4543..9495fa9 100644 --- a/staging/vhost-device-video/src/video.rs +++ b/staging/vhost-device-video/src/video.rs @@ -946,7 +946,11 @@ impl ToBytes for virtio_video_event { pub mod tests { use assert_matches::assert_matches; use rstest::*; - use virtio_queue::{mock::MockSplitQueue, Descriptor, Queue, QueueOwnedT}; + use virtio_queue::{ + desc::{split::Descriptor as SplitDescriptor, RawDescriptor}, + mock::MockSplitQueue, + Queue, QueueOwnedT, + }; use vm_memory::{ Address, Bytes, GuestAddress, GuestAddressSpace, GuestMemoryAtomic, GuestMemoryMmap, }; @@ -961,9 +965,12 @@ pub mod tests { let flags = 0; let request = request.as_slice(); - let desc = Descriptor::new(addr, request.len() as u32, flags as u16, 1); + let desc = SplitDescriptor::new(addr, request.len() as u32, flags as u16, 1); mem.write(request, desc.addr()).unwrap(); - assert!(virt_queue.desc_table().store(0, desc).is_ok()); + assert!(virt_queue + .desc_table() + .store(0, RawDescriptor::from(desc)) + .is_ok()); // Put the descriptor index 0 in the first available ring position. mem.write_obj(0u16, virt_queue.avail_addr().unchecked_add(4)) diff --git a/vhost-device-can/Cargo.toml b/vhost-device-can/Cargo.toml index 946872b..9424b1c 100644 --- a/vhost-device-can/Cargo.toml +++ b/vhost-device-can/Cargo.toml @@ -22,13 +22,13 @@ thiserror = "2.0" queues = "1.0.2" socketcan = "3.5.0" vhost = { version = "0.14", features = ["vhost-user-backend"] } -vhost-user-backend = "0.18" +vhost-user-backend = "0.19" virtio-bindings = "0.2.5" -virtio-queue = "0.14" +virtio-queue = "0.15" vm-memory = "0.16.1" vmm-sys-util = "0.14" [dev-dependencies] assert_matches = "1.5" -virtio-queue = { version = "0.14", features = ["test-utils"] } +virtio-queue = { version = "0.15", features = ["test-utils"] } vm-memory = { version = "0.16.1", features = ["backend-mmap", "backend-atomic"] } diff --git a/vhost-device-can/src/vhu_can.rs b/vhost-device-can/src/vhu_can.rs index 3e45490..af375b5 100644 --- a/vhost-device-can/src/vhu_can.rs +++ b/vhost-device-can/src/vhu_can.rs @@ -724,7 +724,11 @@ mod tests { use crate::virtio_can::{VirtioCanCtrlResponse, VirtioCanTxResponse}; use std::mem::size_of; use virtio_bindings::virtio_ring::{VRING_DESC_F_NEXT, VRING_DESC_F_WRITE}; - use virtio_queue::{mock::MockSplitQueue, Descriptor, Queue}; + use virtio_queue::{ + desc::{split::Descriptor as SplitDescriptor, RawDescriptor}, + mock::MockSplitQueue, + Queue, + }; use vm_memory::{Bytes, GuestAddress, GuestMemoryAtomic, GuestMemoryMmap, Le16, Le32}; #[test] @@ -831,7 +835,12 @@ mod tests { flags[i as usize] & !VRING_DESC_F_NEXT as u16 }; - let desc = Descriptor::new((0x100 * (i + 1)) as u64, len, desc_flags, i + 1); + let desc = RawDescriptor::from(SplitDescriptor::new( + (0x100 * (i + 1)) as u64, + len, + desc_flags, + i + 1, + )); desc_vec.push(desc); } diff --git a/vhost-device-console/Cargo.toml b/vhost-device-console/Cargo.toml index e9fe729..9fd417c 100644 --- a/vhost-device-console/Cargo.toml +++ b/vhost-device-console/Cargo.toml @@ -24,13 +24,13 @@ epoll = "4.3" log = "0.4" thiserror = "2.0" vhost = { version = "0.14", features = ["vhost-user-backend"] } -vhost-user-backend = "0.18" +vhost-user-backend = "0.19" virtio-bindings = "0.2.5" -virtio-queue = "0.14" +virtio-queue = "0.15" vm-memory = "0.16.1" vmm-sys-util = "0.14" [dev-dependencies] assert_matches = "1.5" -virtio-queue = { version = "0.14", features = ["test-utils"] } +virtio-queue = { version = "0.15", features = ["test-utils"] } vm-memory = { version = "0.16.1", features = ["backend-mmap", "backend-atomic"] } diff --git a/vhost-device-console/src/vhu_console.rs b/vhost-device-console/src/vhu_console.rs index c86266f..021b2fa 100644 --- a/vhost-device-console/src/vhu_console.rs +++ b/vhost-device-console/src/vhu_console.rs @@ -860,7 +860,11 @@ mod tests { use std::io::Cursor; use virtio_bindings::virtio_ring::{VRING_DESC_F_NEXT, VRING_DESC_F_WRITE}; - use virtio_queue::{mock::MockSplitQueue, Descriptor, Queue}; + use virtio_queue::{ + desc::{split::Descriptor as SplitDescriptor, RawDescriptor}, + mock::MockSplitQueue, + Queue, + }; use vm_memory::{Bytes, GuestAddress, GuestMemoryAtomic, GuestMemoryMmap}; use super::*; @@ -972,7 +976,12 @@ mod tests { flags[i as usize] & !VRING_DESC_F_NEXT as u16 }; - let desc = Descriptor::new(u64::from(0x100 * (i + 1)), len, desc_flags, i + 1); + let desc = RawDescriptor::from(SplitDescriptor::new( + u64::from(0x100 * (i + 1)), + len, + desc_flags, + i + 1, + )); desc_vec.push(desc); } diff --git a/vhost-device-gpio/Cargo.toml b/vhost-device-gpio/Cargo.toml index 9556deb..ff683de 100644 --- a/vhost-device-gpio/Cargo.toml +++ b/vhost-device-gpio/Cargo.toml @@ -22,9 +22,9 @@ libc = "0.2" log = "0.4" thiserror = "2.0" vhost = { version = "0.14", features = ["vhost-user-backend"] } -vhost-user-backend = "0.18" +vhost-user-backend = "0.19" virtio-bindings = "0.2.5" -virtio-queue = "0.14" +virtio-queue = "0.15" vm-memory = "0.16.1" vmm-sys-util = "0.14" @@ -33,5 +33,5 @@ libgpiod = "0.2" [dev-dependencies] assert_matches = "1.5" -virtio-queue = { version = "0.14", features = ["test-utils"] } +virtio-queue = { version = "0.15", features = ["test-utils"] } vm-memory = { version = "0.16.1", features = ["backend-mmap", "backend-atomic"] } diff --git a/vhost-device-gpio/src/vhu_gpio.rs b/vhost-device-gpio/src/vhu_gpio.rs index 021d963..e441b22 100644 --- a/vhost-device-gpio/src/vhu_gpio.rs +++ b/vhost-device-gpio/src/vhu_gpio.rs @@ -502,7 +502,11 @@ impl VhostUserBackendMut for VhostUserGpi #[cfg(test)] mod tests { use virtio_bindings::bindings::virtio_ring::{VRING_DESC_F_NEXT, VRING_DESC_F_WRITE}; - use virtio_queue::{mock::MockSplitQueue, Descriptor, Queue}; + use virtio_queue::{ + desc::{split::Descriptor as SplitDescriptor, RawDescriptor}, + mock::MockSplitQueue, + Queue, + }; use vm_memory::{Address, GuestAddress, GuestMemoryAtomic, GuestMemoryMmap}; use super::Error; @@ -523,7 +527,7 @@ mod tests { let mut next_addr = vq.desc_table().total_size() + 0x100; let mut index = 0; - let desc_out = Descriptor::new( + let desc_out = SplitDescriptor::new( next_addr, size_of::() as u32, VRING_DESC_F_NEXT as u16, @@ -531,12 +535,19 @@ mod tests { ); mem.write_obj::(out_hdr, desc_out.addr()).unwrap(); - vq.desc_table().store(index, desc_out).unwrap(); + vq.desc_table() + .store(index, RawDescriptor::from(desc_out)) + .unwrap(); next_addr += desc_out.len() as u64; index += 1; // In response descriptor - let desc_in = Descriptor::new(next_addr, response_len, VRING_DESC_F_WRITE as u16, 0); + let desc_in = RawDescriptor::from(SplitDescriptor::new( + next_addr, + response_len, + VRING_DESC_F_WRITE as u16, + 0, + )); vq.desc_table().store(index, desc_in).unwrap(); // Put the descriptor index 0 in the first available ring position. @@ -610,7 +621,7 @@ mod tests { _ => 0x100, }; - let desc = Descriptor::new(offset, len[i], f, (i + 1) as u16); + let desc = RawDescriptor::from(SplitDescriptor::new(offset, len[i], f, (i + 1) as u16)); vq.desc_table().store(i as u16, desc).unwrap(); } diff --git a/vhost-device-gpu/Cargo.toml b/vhost-device-gpu/Cargo.toml index 9a13acf..9555206 100644 --- a/vhost-device-gpu/Cargo.toml +++ b/vhost-device-gpu/Cargo.toml @@ -28,9 +28,9 @@ log = "0.4" rutabaga_gfx = { version = "0.1.5", features = ["virgl_renderer"] } thiserror = "2.0.12" vhost = { version = "0.14.0", features = ["vhost-user-backend"] } -vhost-user-backend = "0.18" +vhost-user-backend = "0.19" virtio-bindings = "0.2.5" -virtio-queue = "0.14.0" +virtio-queue = "0.15.0" vm-memory = "0.16.1" vmm-sys-util = "0.14.0" bitflags = "2.9.1" @@ -40,5 +40,5 @@ assert_matches = "1.5" mockall = "0.13.0" rusty-fork = "0.3.0" tempfile = "3.20" -virtio-queue = { version = "0.14", features = ["test-utils"] } +virtio-queue = { version = "0.15", features = ["test-utils"] } vm-memory = { version = "0.16.1", features = ["backend-mmap", "backend-atomic"] } diff --git a/vhost-device-gpu/src/device.rs b/vhost-device-gpu/src/device.rs index 73246b7..3bf6179 100644 --- a/vhost-device-gpu/src/device.rs +++ b/vhost-device-gpu/src/device.rs @@ -724,7 +724,11 @@ mod tests { use vhost::vhost_user::gpu_message::{VhostUserGpuScanout, VhostUserGpuUpdate}; use vhost_user_backend::{VhostUserDaemon, VringRwLock, VringT}; use virtio_bindings::virtio_ring::{VRING_DESC_F_NEXT, VRING_DESC_F_WRITE}; - use virtio_queue::{mock::MockSplitQueue, Descriptor, Queue, QueueT}; + use virtio_queue::{ + desc::{split::Descriptor as SplitDescriptor, RawDescriptor}, + mock::MockSplitQueue, + Queue, QueueT, + }; use vm_memory::{ ByteValued, Bytes, GuestAddress, GuestMemory, GuestMemoryAtomic, GuestMemoryMmap, }; @@ -972,7 +976,7 @@ mod tests { assert_matches!(result, Ok(OkNoData)); } - fn make_descriptors_into_a_chain(start_idx: u16, descriptors: &mut [Descriptor]) { + fn make_descriptors_into_a_chain(start_idx: u16, descriptors: &mut [SplitDescriptor]) { let last_idx = start_idx + descriptors.len() as u16 - 1; for (idx, desc) in zip(start_idx.., descriptors.iter_mut()) { if idx == last_idx { @@ -1011,7 +1015,7 @@ mod tests { mem.memory() .check_address(GuestAddress(next_addr)) .expect("Readable descriptor's buffer address is not valid!"); - let desc = Descriptor::new( + let desc = SplitDescriptor::new( next_addr, buf.len() .try_into() @@ -1028,7 +1032,7 @@ mod tests { mem.memory() .check_address(GuestAddress(next_addr)) .expect("Writable descriptor's buffer address is not valid!"); - let desc = Descriptor::new(next_addr, desc_len, VRING_DESC_F_WRITE as u16, 0); + let desc = SplitDescriptor::new(next_addr, desc_len, VRING_DESC_F_WRITE as u16, 0); writable_descriptor_adresses.push(desc.addr()); descriptors.push(desc); next_addr += u64::from(desc_len); @@ -1043,7 +1047,11 @@ mod tests { assert!(descriptors.len() < queue_size as usize); if !descriptors.is_empty() { - vq.build_multiple_desc_chains(&descriptors) + let descs_raw = descriptors + .into_iter() + .map(RawDescriptor::from) + .collect::>(); + vq.build_multiple_desc_chains(&descs_raw) .expect("Failed to build descriptor chain"); } diff --git a/vhost-device-gpu/src/protocol.rs b/vhost-device-gpu/src/protocol.rs index 19ebeb8..b7c207f 100644 --- a/vhost-device-gpu/src/protocol.rs +++ b/vhost-device-gpu/src/protocol.rs @@ -1151,7 +1151,10 @@ impl GpuResponse { #[cfg(test)] mod tests { use virtio_bindings::virtio_ring::VRING_DESC_F_WRITE; - use virtio_queue::{mock::MockSplitQueue, Descriptor}; + use virtio_queue::{ + desc::{split::Descriptor as SplitDescriptor, RawDescriptor}, + mock::MockSplitQueue, + }; use vm_memory::GuestMemoryMmap; use super::*; @@ -1337,7 +1340,12 @@ mod tests { let vq = MockSplitQueue::new(&mem, 8); let desc_chain = vq - .build_desc_chain(&[Descriptor::new(0x1000, 8192, VRING_DESC_F_WRITE as u16, 0)]) + .build_desc_chain(&[RawDescriptor::from(SplitDescriptor::new( + 0x1000, + 8192, + VRING_DESC_F_WRITE as u16, + 0, + ))]) .unwrap(); let mut writer = desc_chain diff --git a/vhost-device-i2c/Cargo.toml b/vhost-device-i2c/Cargo.toml index 2b122a0..fa91c8c 100644 --- a/vhost-device-i2c/Cargo.toml +++ b/vhost-device-i2c/Cargo.toml @@ -21,13 +21,13 @@ libc = "0.2" log = "0.4" thiserror = "2.0" vhost = { version = "0.14", features = ["vhost-user-backend"] } -vhost-user-backend = "0.18" +vhost-user-backend = "0.19" virtio-bindings = "0.2.5" -virtio-queue = "0.14" +virtio-queue = "0.15" vm-memory = "0.16.1" vmm-sys-util = "0.14" [dev-dependencies] assert_matches = "1.5" -virtio-queue = { version = "0.14", features = ["test-utils"] } +virtio-queue = { version = "0.15", features = ["test-utils"] } vm-memory = { version = "0.16.1", features = ["backend-mmap", "backend-atomic"] } diff --git a/vhost-device-i2c/src/vhu_i2c.rs b/vhost-device-i2c/src/vhu_i2c.rs index 3a512f5..7af6fc2 100644 --- a/vhost-device-i2c/src/vhu_i2c.rs +++ b/vhost-device-i2c/src/vhu_i2c.rs @@ -361,7 +361,11 @@ impl VhostUserBackendMut for VhostUserI2cB #[cfg(test)] mod tests { use virtio_bindings::bindings::virtio_ring::{VRING_DESC_F_NEXT, VRING_DESC_F_WRITE}; - use virtio_queue::{mock::MockSplitQueue, Descriptor, Queue}; + use virtio_queue::{ + desc::{split::Descriptor as SplitDescriptor, RawDescriptor}, + mock::MockSplitQueue, + Queue, + }; use vm_memory::{Address, GuestAddress, GuestMemoryAtomic, GuestMemoryMmap}; use super::Error; @@ -388,7 +392,7 @@ mod tests { flags: From::from(flag), }; - let desc_out = Descriptor::new( + let desc_out = SplitDescriptor::new( next_addr, size_of::() as u32, VRING_DESC_F_NEXT as u16, @@ -397,7 +401,9 @@ mod tests { mem.write_obj::(out_hdr, desc_out.addr()) .unwrap(); - vq.desc_table().store(index, desc_out).unwrap(); + vq.desc_table() + .store(index, RawDescriptor::from(desc_out)) + .unwrap(); next_addr += desc_out.len() as u64; index += 1; @@ -411,26 +417,30 @@ mod tests { VRING_DESC_F_WRITE }; - let desc_buf = Descriptor::new( + let desc_buf = SplitDescriptor::new( next_addr, buf.len() as u32, (flag | VRING_DESC_F_NEXT) as u16, index + 1, ); mem.write(buf, desc_buf.addr()).unwrap(); - vq.desc_table().store(index, desc_buf).unwrap(); + vq.desc_table() + .store(index, RawDescriptor::from(desc_buf)) + .unwrap(); next_addr += desc_buf.len() as u64; index += 1; } // In response descriptor - let desc_in = Descriptor::new( + let desc_in = SplitDescriptor::new( next_addr, size_of::() as u32, VRING_DESC_F_WRITE as u16, 0, ); - vq.desc_table().store(index, desc_in).unwrap(); + vq.desc_table() + .store(index, RawDescriptor::from(desc_in)) + .unwrap(); // Put the descriptor index 0 in the first available ring position. mem.write_obj(0u16, vq.avail_addr().unchecked_add(4)) @@ -503,7 +513,7 @@ mod tests { _ => 0x100, }; - let desc = Descriptor::new(offset, len[i], f, (i + 1) as u16); + let desc = RawDescriptor::from(SplitDescriptor::new(offset, len[i], f, (i + 1) as u16)); vq.desc_table().store(i as u16, desc).unwrap(); } diff --git a/vhost-device-input/Cargo.toml b/vhost-device-input/Cargo.toml index ee0c632..1758ccb 100644 --- a/vhost-device-input/Cargo.toml +++ b/vhost-device-input/Cargo.toml @@ -23,9 +23,9 @@ rand = "0.9.1" tempfile = "3.20" thiserror = "2.0" vhost = { version = "0.14", features = ["vhost-user-backend"] } -vhost-user-backend = "0.18" +vhost-user-backend = "0.19" virtio-bindings = "0.2.5" -virtio-queue = "0.14" +virtio-queue = "0.15" vm-memory = "0.16.1" vmm-sys-util = "0.14" evdev = "0.13" @@ -33,5 +33,5 @@ nix = { version = "0.30", features = ["ioctl"] } [dev-dependencies] assert_matches = "1.5" -virtio-queue = { version = "0.14", features = ["test-utils"] } +virtio-queue = { version = "0.15", features = ["test-utils"] } vm-memory = { version = "0.16", features = ["backend-mmap", "backend-atomic"] } diff --git a/vhost-device-input/src/vhu_input.rs b/vhost-device-input/src/vhu_input.rs index 6d1c04b..439ac93 100644 --- a/vhost-device-input/src/vhu_input.rs +++ b/vhost-device-input/src/vhu_input.rs @@ -430,7 +430,7 @@ mod tests { use std::mem; use std::os::fd::RawFd; use std::path::PathBuf; - use virtio_queue::Descriptor; + use virtio_queue::desc::{split::Descriptor as SplitDescriptor, RawDescriptor}; use vm_memory::{Address, Bytes, GuestAddress, GuestMemoryAtomic, GuestMemoryMmap}; use super::*; @@ -588,10 +588,10 @@ mod tests { vring.set_queue_info(0x100, 0x200, 0x300).unwrap(); // Create a descriptor chain with two descriptors. - let desc = Descriptor::new(0x400_u64, 0x100, 0, 0); + let desc = RawDescriptor::from(SplitDescriptor::new(0x400_u64, 0x100, 0, 0)); mem_map.write_obj(desc, GuestAddress(0x100)).unwrap(); - let desc = Descriptor::new(0x500_u64, 0x100, 0, 0); + let desc = RawDescriptor::from(SplitDescriptor::new(0x500_u64, 0x100, 0, 0)); mem_map.write_obj(desc, GuestAddress(0x100 + 16)).unwrap(); // Put the descriptor index 0 in the first available ring position. diff --git a/vhost-device-rng/Cargo.toml b/vhost-device-rng/Cargo.toml index 38d5603..6a36924 100644 --- a/vhost-device-rng/Cargo.toml +++ b/vhost-device-rng/Cargo.toml @@ -22,13 +22,13 @@ rand = "0.9.1" tempfile = "3.20" thiserror = "2.0" vhost = { version = "0.14", features = ["vhost-user-backend"] } -vhost-user-backend = "0.18" +vhost-user-backend = "0.19" virtio-bindings = "0.2.5" -virtio-queue = "0.14" +virtio-queue = "0.15" vm-memory = "0.16.1" vmm-sys-util = "0.14" [dev-dependencies] assert_matches = "1.5" -virtio-queue = { version = "0.14", features = ["test-utils"] } +virtio-queue = { version = "0.15", features = ["test-utils"] } vm-memory = { version = "0.16", features = ["backend-mmap", "backend-atomic"] } diff --git a/vhost-device-rng/src/vhu_rng.rs b/vhost-device-rng/src/vhu_rng.rs index b61c991..ae7f38e 100644 --- a/vhost-device-rng/src/vhu_rng.rs +++ b/vhost-device-rng/src/vhu_rng.rs @@ -291,7 +291,11 @@ mod tests { use std::io::ErrorKind; use virtio_bindings::bindings::virtio_ring::{VRING_DESC_F_NEXT, VRING_DESC_F_WRITE}; - use virtio_queue::{mock::MockSplitQueue, Descriptor, Queue}; + use virtio_queue::{ + desc::{split::Descriptor as SplitDescriptor, RawDescriptor}, + mock::MockSplitQueue, + Queue, + }; use vm_memory::{Address, Bytes, GuestAddress, GuestMemoryAtomic, GuestMemoryMmap}; // Add VuRngBackend accessor to artificially manipulate internal fields @@ -359,7 +363,12 @@ mod tests { flags & !VRING_DESC_F_NEXT as u16 }; - let desc = Descriptor::new((0x100 * (i + 1)) as u64, 0x200, desc_flags, i + 1); + let desc = RawDescriptor::from(SplitDescriptor::new( + (0x100 * (i + 1)) as u64, + 0x200, + desc_flags, + i + 1, + )); vq.desc_table().store(i, desc).unwrap(); } diff --git a/vhost-device-scmi/Cargo.toml b/vhost-device-scmi/Cargo.toml index 5474443..6d0ca4d 100644 --- a/vhost-device-scmi/Cargo.toml +++ b/vhost-device-scmi/Cargo.toml @@ -16,12 +16,12 @@ itertools = "0.14" log = "0.4" thiserror = "2.0" vhost = { version = "0.14", features = ["vhost-user-backend"] } -vhost-user-backend = "0.18" +vhost-user-backend = "0.19" virtio-bindings = "0.2" -virtio-queue = "0.14" +virtio-queue = "0.15" vm-memory = "0.16.1" vmm-sys-util = "0.14" [dev-dependencies] assert_matches = "1.5" -virtio-queue = { version = "0.14", features = ["test-utils"] } +virtio-queue = { version = "0.15", features = ["test-utils"] } \ No newline at end of file diff --git a/vhost-device-scmi/src/vhu_scmi.rs b/vhost-device-scmi/src/vhu_scmi.rs index c5345f9..510041c 100644 --- a/vhost-device-scmi/src/vhu_scmi.rs +++ b/vhost-device-scmi/src/vhu_scmi.rs @@ -538,7 +538,11 @@ impl VhostUserBackendMut for VuScmiBackend { #[cfg(test)] mod tests { use virtio_bindings::virtio_ring::{VRING_DESC_F_NEXT, VRING_DESC_F_WRITE}; - use virtio_queue::{mock::MockSplitQueue, Descriptor, Queue}; + use virtio_queue::{ + desc::{split::Descriptor as SplitDescriptor, RawDescriptor}, + mock::MockSplitQueue, + Queue, + }; use vm_memory::{Address, GuestAddress, GuestMemoryAtomic, GuestMemoryMmap}; use super::*; @@ -560,7 +564,7 @@ mod tests { // Descriptor for the SCMI request let desc_request = - Descriptor::new(next_addr, request_size, VRING_DESC_F_NEXT as u16, index + 1); + SplitDescriptor::new(next_addr, request_size, VRING_DESC_F_NEXT as u16, index + 1); let mut bytes: Vec = vec![]; bytes.append(&mut scmi_header(message_id, protocol_id).to_le_bytes().to_vec()); for p in parameters { @@ -568,13 +572,17 @@ mod tests { } mem.write_slice(bytes.as_slice(), desc_request.addr()) .unwrap(); - vq.desc_table().store(index, desc_request).unwrap(); + vq.desc_table() + .store(index, RawDescriptor::from(desc_request)) + .unwrap(); next_addr += u64::from(desc_request.len()); index += 1; // Descriptor for the SCMI response - let desc_response = Descriptor::new(next_addr, 0x100, VRING_DESC_F_WRITE as u16, 0); - vq.desc_table().store(index, desc_response).unwrap(); + let desc_response = SplitDescriptor::new(next_addr, 0x100, VRING_DESC_F_WRITE as u16, 0); + vq.desc_table() + .store(index, RawDescriptor::from(desc_response)) + .unwrap(); // Put the descriptor index 0 in the first available ring position. mem.write_obj(0u16, vq.avail_addr().unchecked_add(4)) @@ -597,8 +605,10 @@ mod tests { let next_addr = vq.desc_table().total_size() + 0x100; // Descriptor for the SCMI event - let desc_response = Descriptor::new(next_addr, 0x100, VRING_DESC_F_WRITE as u16, 0); - vq.desc_table().store(0, desc_response).unwrap(); + let desc_response = SplitDescriptor::new(next_addr, 0x100, VRING_DESC_F_WRITE as u16, 0); + vq.desc_table() + .store(0, RawDescriptor::from(desc_response)) + .unwrap(); // Put the descriptor index 0 in the first available ring position. mem.write_obj(0u16, vq.avail_addr().unchecked_add(4)) @@ -636,7 +646,7 @@ mod tests { Some(addr) => addr, _ => 0x100, }; - let desc = Descriptor::new(offset, p.len, f, (i + 1) as u16); + let desc = RawDescriptor::from(SplitDescriptor::new(offset, p.len, f, (i + 1) as u16)); vq.desc_table().store(i as u16, desc).unwrap(); } diff --git a/vhost-device-scsi/Cargo.toml b/vhost-device-scsi/Cargo.toml index 0510efc..37c9de8 100644 --- a/vhost-device-scsi/Cargo.toml +++ b/vhost-device-scsi/Cargo.toml @@ -22,9 +22,9 @@ log = "0.4" num_enum = "0.7" thiserror = "2.0" vhost = { version = "0.14", features = ["vhost-user-backend"] } -vhost-user-backend = "0.18" +vhost-user-backend = "0.19" virtio-bindings = "0.2.5" -virtio-queue = "0.14" +virtio-queue = "0.15" vm-memory = "0.16.1" vmm-sys-util = "0.14" diff --git a/vhost-device-scsi/src/vhu_scsi.rs b/vhost-device-scsi/src/vhu_scsi.rs index 41db2cf..78931bd 100644 --- a/vhost-device-scsi/src/vhu_scsi.rs +++ b/vhost-device-scsi/src/vhu_scsi.rs @@ -334,7 +334,10 @@ mod tests { VIRTIO_SCSI_S_FAILURE, VIRTIO_SCSI_S_OK, }, }; - use virtio_queue::{mock::MockSplitQueue, Descriptor}; + use virtio_queue::{ + desc::{split::Descriptor, RawDescriptor}, + mock::MockSplitQueue, + }; use vm_memory::{ Address, ByteValued, Bytes, GuestAddress, GuestAddressSpace, GuestMemoryAtomic, GuestMemoryMmap, @@ -426,8 +429,13 @@ mod tests { ); // The `build_desc_chain` function will populate the `NEXT` related flags and field. let v = vec![ - Descriptor::new(0x10_0000, 0x100, 0, 0), // request - Descriptor::new(0x20_0000, 0x100, VRING_DESC_F_WRITE as u16, 0), // response + RawDescriptor::from(Descriptor::new(0x10_0000, 0x100, 0, 0)), // request + RawDescriptor::from(Descriptor::new( + 0x20_0000, + 0x100, + VRING_DESC_F_WRITE as u16, + 0, + )), // response ]; mem.memory() diff --git a/vhost-device-scsi/src/virtio.rs b/vhost-device-scsi/src/virtio.rs index e585ee8..e3074f0 100644 --- a/vhost-device-scsi/src/virtio.rs +++ b/vhost-device-scsi/src/virtio.rs @@ -14,7 +14,7 @@ use std::{ use log::error; use virtio_bindings::virtio_scsi::virtio_scsi_cmd_req; -use virtio_queue::{Descriptor, DescriptorChain, DescriptorChainRwIter}; +use virtio_queue::{desc::split::Descriptor, DescriptorChain, DescriptorChainRwIter}; use vm_memory::{Bytes, GuestAddress, GuestMemory}; /// virtio-scsi has its own format for LUNs, documented in 5.6.6.1 of virtio @@ -315,7 +315,7 @@ where #[cfg(test)] pub(crate) mod tests { use virtio_bindings::virtio_scsi::{virtio_scsi_cmd_req, virtio_scsi_cmd_resp}; - use virtio_queue::{mock::MockSplitQueue, Descriptor}; + use virtio_queue::{desc::RawDescriptor, mock::MockSplitQueue}; use vm_memory::{ByteValued, GuestAddress, GuestMemoryMmap}; use super::*; @@ -353,7 +353,7 @@ pub(crate) mod tests { // The `build_desc_chain` function will populate the `NEXT` related flags and field. let v = vec![ // A device-writable request header descriptor. - Descriptor::new(0x10_0000, 0x100, 0, 0), + RawDescriptor::from(Descriptor::new(0x10_0000, 0x100, 0, 0)), ]; let req = report_luns_command(); diff --git a/vhost-device-sound/Cargo.toml b/vhost-device-sound/Cargo.toml index bd1f0bc..e73177f 100644 --- a/vhost-device-sound/Cargo.toml +++ b/vhost-device-sound/Cargo.toml @@ -22,9 +22,9 @@ env_logger = "0.11" log = "0.4" thiserror = "2.0" vhost = { version = "0.14", features = ["vhost-user-backend"] } -vhost-user-backend = "0.18" +vhost-user-backend = "0.19" virtio-bindings = "0.2.5" -virtio-queue = "0.14" +virtio-queue = "0.15" vm-memory = "0.16.1" vmm-sys-util = "0.14" @@ -36,7 +36,7 @@ pw = { package = "pipewire", version = "0.8", optional = true } [dev-dependencies] rstest = "0.25.0" tempfile = "3.20" -virtio-queue = { version = "0.14", features = ["test-utils"] } +virtio-queue = { version = "0.15", features = ["test-utils"] } vm-memory = { version = "0.16.1", features = ["backend-mmap", "backend-atomic"] } [target.'cfg(target_env = "gnu")'.dev-dependencies] diff --git a/vhost-device-sound/src/device.rs b/vhost-device-sound/src/device.rs index 4c4e05b..41b2ae4 100644 --- a/vhost-device-sound/src/device.rs +++ b/vhost-device-sound/src/device.rs @@ -678,7 +678,10 @@ mod tests { use std::path::PathBuf; use tempfile::tempdir; use virtio_bindings::virtio_ring::VRING_DESC_F_WRITE; - use virtio_queue::{mock::MockSplitQueue, Descriptor}; + use virtio_queue::{ + desc::{split::Descriptor as SplitDescriptor, RawDescriptor}, + mock::MockSplitQueue, + }; use vm_memory::{ Address, Bytes, GuestAddress, GuestAddressSpace, GuestMemoryAtomic, GuestMemoryMmap, }; @@ -688,7 +691,7 @@ mod tests { const SOCKET_PATH: &str = "vsound.socket"; - fn setup_descs(descs: &[Descriptor]) -> (VringRwLock, GuestMemoryAtomic) { + fn setup_descs(descs: &[RawDescriptor]) -> (VringRwLock, GuestMemoryAtomic) { let mem = GuestMemoryAtomic::new( GuestMemoryMmap::<()>::from_ranges(&[(GuestAddress(0), 0x1000_0000)]).unwrap(), ); @@ -774,9 +777,19 @@ mod tests { }; let addr_req = 0x10_0000; let descs = [ - Descriptor::new(addr_req, 0x100, 0, 0), // request - Descriptor::new(0x20_0000, 0x100, VRING_DESC_F_WRITE as u16, 0), - Descriptor::new(0x20_0000, 0x100, VRING_DESC_F_WRITE as u16, 0), // response + RawDescriptor::from(SplitDescriptor::new(addr_req, 0x100, 0, 0)), // request + RawDescriptor::from(SplitDescriptor::new( + 0x20_0000, + 0x100, + VRING_DESC_F_WRITE as u16, + 0, + )), + RawDescriptor::from(SplitDescriptor::new( + 0x20_0000, + 0x100, + VRING_DESC_F_WRITE as u16, + 0, + )), // response ]; let (vring, mem) = setup_descs(&descs); @@ -802,8 +815,13 @@ mod tests { }; let addr_req = 0x10_0000; let descs = [ - Descriptor::new(addr_req, 0x100, 0, 0), // request - Descriptor::new(0x20_0000, 0x100, VRING_DESC_F_WRITE as u16, 0), + RawDescriptor::from(SplitDescriptor::new(addr_req, 0x100, 0, 0)), // request + RawDescriptor::from(SplitDescriptor::new( + 0x20_0000, + 0x100, + VRING_DESC_F_WRITE as u16, + 0, + )), ]; let (vring, mem) = setup_descs(&descs); @@ -850,7 +868,7 @@ mod tests { // single descriptor request shall fail let descs = [ - Descriptor::new(0, 0, 0, 0), // request + RawDescriptor::from(SplitDescriptor::new(0, 0, 0, 0)), // request ]; let (vring, mem) = setup_descs(&descs); t.mem = Some(mem); @@ -858,15 +876,18 @@ mod tests { // a request with the first descriptor write-only shall fail let descs = [ - Descriptor::new(0, 0, VRING_DESC_F_WRITE as u16, 0), - Descriptor::new(0, 0, VRING_DESC_F_WRITE as u16, 0), + RawDescriptor::from(SplitDescriptor::new(0, 0, VRING_DESC_F_WRITE as u16, 0)), + RawDescriptor::from(SplitDescriptor::new(0, 0, VRING_DESC_F_WRITE as u16, 0)), ]; let (vring, mem) = setup_descs(&descs); t.mem = Some(mem); t.process_control(&vring, &audio_backend).unwrap_err(); // a request with the second descriptor read-only shall fail - let descs = [Descriptor::new(0, 0, 0, 0), Descriptor::new(0, 0, 0, 0)]; + let descs = [ + RawDescriptor::from(SplitDescriptor::new(0, 0, 0, 0)), + RawDescriptor::from(SplitDescriptor::new(0, 0, 0, 0)), + ]; let (vring, mem) = setup_descs(&descs); t.mem = Some(mem); t.process_control(&vring, &audio_backend).unwrap_err(); @@ -883,13 +904,18 @@ mod tests { }; let addr_req = 0x10_0000; let descs = [ - Descriptor::new(addr_req, size_of::() as u32, 0, 0), // request - Descriptor::new( + RawDescriptor::from(SplitDescriptor::new( + addr_req, + size_of::() as u32, + 0, + 0, + )), // request + RawDescriptor::from(SplitDescriptor::new( 0x20_0000, size_of::() as u32, VRING_DESC_F_WRITE as u16, 0, - ), // response + )), // response ]; let (vring, mem) = setup_descs(&descs); mem.memory() diff --git a/vhost-device-sound/src/stream.rs b/vhost-device-sound/src/stream.rs index 53d2140..5d1a749 100644 --- a/vhost-device-sound/src/stream.rs +++ b/vhost-device-sound/src/stream.rs @@ -374,7 +374,11 @@ mod tests { use vhost_user_backend::{VringRwLock, VringT}; use virtio_bindings::bindings::virtio_ring::{VRING_DESC_F_NEXT, VRING_DESC_F_WRITE}; - use virtio_queue::{mock::MockSplitQueue, Descriptor, Queue, QueueOwnedT}; + use virtio_queue::{ + desc::{split::Descriptor as SplitDescriptor, RawDescriptor}, + mock::MockSplitQueue, + Queue, QueueOwnedT, + }; use vm_memory::{ Address, ByteValued, Bytes, GuestAddress, GuestAddressSpace, GuestMemoryAtomic, GuestMemoryMmap, @@ -395,7 +399,7 @@ mod tests { let mut next_addr = vq.desc_table().total_size() + 0x100; let mut index = 0; - let desc_out = Descriptor::new( + let desc_out = SplitDescriptor::new( next_addr, (std::mem::size_of::() as u32) .checked_add(payload_len) @@ -405,12 +409,19 @@ mod tests { ); mem.write_obj::(hdr, desc_out.addr()).unwrap(); - vq.desc_table().store(index, desc_out).unwrap(); + vq.desc_table() + .store(index, RawDescriptor::from(desc_out)) + .unwrap(); next_addr += u64::from(desc_out.len()); index += 1; // In response descriptor - let desc_in = Descriptor::new(next_addr, response_len, VRING_DESC_F_WRITE as u16, 0); + let desc_in = RawDescriptor::from(SplitDescriptor::new( + next_addr, + response_len, + VRING_DESC_F_WRITE as u16, + 0, + )); vq.desc_table().store(index, desc_in).unwrap(); // Put the descriptor index 0 in the first available ring position. diff --git a/vhost-device-spi/Cargo.toml b/vhost-device-spi/Cargo.toml index bef594c..3279238 100644 --- a/vhost-device-spi/Cargo.toml +++ b/vhost-device-spi/Cargo.toml @@ -22,14 +22,14 @@ libc = "0.2" log = "0.4" thiserror = "2.0" vhost = { version = "0.14", features = ["vhost-user-backend"] } -vhost-user-backend = "0.18" +vhost-user-backend = "0.19" virtio-bindings = "0.2.5" -virtio-queue = "0.14" +virtio-queue = "0.15" vm-memory = "0.16.1" vmm-sys-util = "0.14" bitflags = "2.9.1" [dev-dependencies] assert_matches = "1.5" -virtio-queue = { version = "0.14", features = ["test-utils"] } +virtio-queue = { version = "0.15", features = ["test-utils"] } vm-memory = { version = "0.16.1", features = ["backend-mmap", "backend-atomic"] } diff --git a/vhost-device-spi/src/vhu_spi.rs b/vhost-device-spi/src/vhu_spi.rs index b7d38be..e1a234c 100644 --- a/vhost-device-spi/src/vhu_spi.rs +++ b/vhost-device-spi/src/vhu_spi.rs @@ -491,7 +491,10 @@ mod tests { use std::path::PathBuf; use std::slice::from_raw_parts; use virtio_bindings::bindings::virtio_ring::{VRING_DESC_F_NEXT, VRING_DESC_F_WRITE}; - use virtio_queue::{mock::MockSplitQueue, Descriptor}; + use virtio_queue::{ + desc::{split::Descriptor as SplitDescriptor, RawDescriptor}, + mock::MockSplitQueue, + }; use vm_memory::{Bytes, GuestAddress, GuestMemoryAtomic, GuestMemoryMmap}; use super::Error; @@ -499,7 +502,7 @@ mod tests { use crate::spi::tests::{verify_rdwr_buf, DummyDevice}; // Prepares descriptor chains - fn setup_descs(descs: &[Descriptor]) -> (VringRwLock, GuestMemoryAtomic) { + fn setup_descs(descs: &[SplitDescriptor]) -> (VringRwLock, GuestMemoryAtomic) { let mem = GuestMemoryAtomic::new( GuestMemoryMmap::<()>::from_ranges(&[(GuestAddress(0), 0x1000_0000)]).unwrap(), ); @@ -507,7 +510,7 @@ mod tests { let queue = MockSplitQueue::new(&*mem_handle, 16); - let mut modified_descs: Vec = Vec::with_capacity(descs.len()); + let mut modified_descs: Vec = Vec::with_capacity(descs.len()); // Use this tag to indicate the start of request let mut request_head: bool = true; @@ -533,12 +536,12 @@ mod tests { idx as u16 + 1 }; - modified_descs.push(Descriptor::new( + modified_descs.push(RawDescriptor::from(SplitDescriptor::new( desc.addr().0, desc.len(), desc.flags(), next, - )); + ))); } queue @@ -604,14 +607,14 @@ mod tests { // Valid single write request let to_descs = [ - Descriptor::new( + SplitDescriptor::new( trans_header_addr1, size_of::() as u32, VRING_DESC_F_NEXT as u16, 0, ), - Descriptor::new(tx_buf_addr1, 30, VRING_DESC_F_NEXT as u16, 0), - Descriptor::new( + SplitDescriptor::new(tx_buf_addr1, 30, VRING_DESC_F_NEXT as u16, 0), + SplitDescriptor::new( trans_result_addr1, size_of::() as u32, VRING_DESC_F_WRITE as u16, @@ -653,19 +656,19 @@ mod tests { // Valid single read request let ro_descs = [ - Descriptor::new( + SplitDescriptor::new( trans_header_addr1, size_of::() as u32, VRING_DESC_F_NEXT as u16, 0, ), - Descriptor::new( + SplitDescriptor::new( rx_buf_addr1, 30, (VRING_DESC_F_NEXT | VRING_DESC_F_WRITE) as u16, 0, ), - Descriptor::new( + SplitDescriptor::new( trans_result_addr1, size_of::() as u32, VRING_DESC_F_WRITE as u16, @@ -709,20 +712,20 @@ mod tests { // Valid mixed read-write request let tx_rx_descs = [ - Descriptor::new( + SplitDescriptor::new( trans_header_addr1, size_of::() as u32, VRING_DESC_F_NEXT as u16, 0, ), - Descriptor::new(tx_buf_addr1, 30, VRING_DESC_F_NEXT as u16, 0), - Descriptor::new( + SplitDescriptor::new(tx_buf_addr1, 30, VRING_DESC_F_NEXT as u16, 0), + SplitDescriptor::new( rx_buf_addr1, 30, (VRING_DESC_F_NEXT | VRING_DESC_F_WRITE) as u16, 0, ), - Descriptor::new( + SplitDescriptor::new( trans_result_addr1, size_of::() as u32, VRING_DESC_F_WRITE as u16, @@ -766,39 +769,39 @@ mod tests { // Valid multiple requests let multi_reqs_descs = [ - Descriptor::new( + SplitDescriptor::new( trans_header_addr1, size_of::() as u32, VRING_DESC_F_NEXT as u16, 0, ), - Descriptor::new(tx_buf_addr1, 30, VRING_DESC_F_NEXT as u16, 0), - Descriptor::new( + SplitDescriptor::new(tx_buf_addr1, 30, VRING_DESC_F_NEXT as u16, 0), + SplitDescriptor::new( rx_buf_addr1, 30, (VRING_DESC_F_NEXT | VRING_DESC_F_WRITE) as u16, 0, ), - Descriptor::new( + SplitDescriptor::new( trans_result_addr1, size_of::() as u32, VRING_DESC_F_WRITE as u16, 0, ), - Descriptor::new( + SplitDescriptor::new( trans_header_addr2, size_of::() as u32, VRING_DESC_F_NEXT as u16, 0, ), - Descriptor::new(tx_buf_addr2, 16, VRING_DESC_F_NEXT as u16, 0), - Descriptor::new( + SplitDescriptor::new(tx_buf_addr2, 16, VRING_DESC_F_NEXT as u16, 0), + SplitDescriptor::new( rx_buf_addr2, 16, (VRING_DESC_F_NEXT | VRING_DESC_F_WRITE) as u16, 0, ), - Descriptor::new( + SplitDescriptor::new( trans_result_addr2, size_of::() as u32, VRING_DESC_F_WRITE as u16, @@ -854,14 +857,14 @@ mod tests { // unsupported LOOP mode, should filter by parameter check let mode_invalid_descs = [ - Descriptor::new( + SplitDescriptor::new( trans_header_addr1, size_of::() as u32, VRING_DESC_F_NEXT as u16, 0, ), - Descriptor::new(tx_buf_addr1, 30, VRING_DESC_F_NEXT as u16, 0), - Descriptor::new( + SplitDescriptor::new(tx_buf_addr1, 30, VRING_DESC_F_NEXT as u16, 0), + SplitDescriptor::new( trans_result_addr1, size_of::() as u32, VRING_DESC_F_WRITE as u16, @@ -903,14 +906,14 @@ mod tests { // unsupported tx_nbits, should filter by parameter check let mode_invalid_descs = [ - Descriptor::new( + SplitDescriptor::new( trans_header_addr1, size_of::() as u32, VRING_DESC_F_NEXT as u16, 0, ), - Descriptor::new(tx_buf_addr1, 30, VRING_DESC_F_NEXT as u16, 0), - Descriptor::new( + SplitDescriptor::new(tx_buf_addr1, 30, VRING_DESC_F_NEXT as u16, 0), + SplitDescriptor::new( trans_result_addr1, size_of::() as u32, VRING_DESC_F_WRITE as u16, @@ -952,39 +955,39 @@ mod tests { // Valid multiple requests which contains invalid request header let multi_reqs_descs = [ - Descriptor::new( + SplitDescriptor::new( trans_header_addr1, size_of::() as u32, VRING_DESC_F_NEXT as u16, 0, ), - Descriptor::new(tx_buf_addr1, 30, VRING_DESC_F_NEXT as u16, 0), - Descriptor::new( + SplitDescriptor::new(tx_buf_addr1, 30, VRING_DESC_F_NEXT as u16, 0), + SplitDescriptor::new( rx_buf_addr1, 30, (VRING_DESC_F_NEXT | VRING_DESC_F_WRITE) as u16, 0, ), - Descriptor::new( + SplitDescriptor::new( trans_result_addr1, size_of::() as u32, VRING_DESC_F_WRITE as u16, 0, ), - Descriptor::new( + SplitDescriptor::new( trans_header_addr2, size_of::() as u32, VRING_DESC_F_NEXT as u16, 0, ), - Descriptor::new(tx_buf_addr2, 16, VRING_DESC_F_NEXT as u16, 0), - Descriptor::new( + SplitDescriptor::new(tx_buf_addr2, 16, VRING_DESC_F_NEXT as u16, 0), + SplitDescriptor::new( rx_buf_addr2, 16, (VRING_DESC_F_NEXT | VRING_DESC_F_WRITE) as u16, 0, ), - Descriptor::new( + SplitDescriptor::new( trans_result_addr2, size_of::() as u32, VRING_DESC_F_WRITE as u16, @@ -1066,14 +1069,14 @@ mod tests { // Backend mem must be set properly before transmit. let writable_head_descs = [ - Descriptor::new( + SplitDescriptor::new( trans_header_addr1, size_of::() as u32, (VRING_DESC_F_WRITE | VRING_DESC_F_NEXT) as u16, 0, ), - Descriptor::new(tx_buf_addr1, 30, VRING_DESC_F_NEXT as u16, 0), - Descriptor::new( + SplitDescriptor::new(tx_buf_addr1, 30, VRING_DESC_F_NEXT as u16, 0), + SplitDescriptor::new( trans_result_addr1, size_of::() as u32, VRING_DESC_F_WRITE as u16, @@ -1111,14 +1114,14 @@ mod tests { // Set request head descriptor as writable, which is invalid. let writable_head_descs = [ - Descriptor::new( + SplitDescriptor::new( trans_header_addr1, size_of::() as u32, (VRING_DESC_F_WRITE | VRING_DESC_F_NEXT) as u16, 0, ), - Descriptor::new(tx_buf_addr1, 30, VRING_DESC_F_NEXT as u16, 0), - Descriptor::new( + SplitDescriptor::new(tx_buf_addr1, 30, VRING_DESC_F_NEXT as u16, 0), + SplitDescriptor::new( trans_result_addr1, size_of::() as u32, VRING_DESC_F_WRITE as u16, @@ -1157,14 +1160,14 @@ mod tests { // Set request result descriptor as readable, which is invalid. let readable_result_descs = [ - Descriptor::new( + SplitDescriptor::new( trans_header_addr1, size_of::() as u32, VRING_DESC_F_NEXT as u16, 0, ), - Descriptor::new(tx_buf_addr1, 30, VRING_DESC_F_NEXT as u16, 0), - Descriptor::new( + SplitDescriptor::new(tx_buf_addr1, 30, VRING_DESC_F_NEXT as u16, 0), + SplitDescriptor::new( trans_result_addr1, size_of::() as u32, 0, @@ -1203,20 +1206,20 @@ mod tests { // Set tx_buf len and rx_buf len different, which is invalid. let tx_rx_len_diff_descs = [ - Descriptor::new( + SplitDescriptor::new( trans_header_addr1, size_of::() as u32, VRING_DESC_F_NEXT as u16, 0, ), - Descriptor::new(tx_buf_addr1, 30, VRING_DESC_F_NEXT as u16, 0), - Descriptor::new( + SplitDescriptor::new(tx_buf_addr1, 30, VRING_DESC_F_NEXT as u16, 0), + SplitDescriptor::new( rx_buf_addr1, 20, (VRING_DESC_F_WRITE | VRING_DESC_F_NEXT) as u16, 0, ), - Descriptor::new( + SplitDescriptor::new( trans_result_addr1, size_of::() as u32, VRING_DESC_F_WRITE as u16, @@ -1255,13 +1258,13 @@ mod tests { // At lease one buf needed, either tx_buf or rx_buf. let no_buf_descs = [ - Descriptor::new( + SplitDescriptor::new( trans_header_addr1, size_of::() as u32, VRING_DESC_F_NEXT as u16, 0, ), - Descriptor::new( + SplitDescriptor::new( trans_result_addr1, size_of::() as u32, VRING_DESC_F_WRITE as u16, @@ -1300,20 +1303,20 @@ mod tests { // The address range is from 0 to 0x1000_1000, set head address out of range. let head_addr_invalid_descs = [ - Descriptor::new( + SplitDescriptor::new( 0x2000_0000, size_of::() as u32, VRING_DESC_F_NEXT as u16, 0, ), - Descriptor::new(tx_buf_addr1, 30, VRING_DESC_F_NEXT as u16, 0), - Descriptor::new( + SplitDescriptor::new(tx_buf_addr1, 30, VRING_DESC_F_NEXT as u16, 0), + SplitDescriptor::new( rx_buf_addr1, 30, (VRING_DESC_F_WRITE | VRING_DESC_F_NEXT) as u16, 0, ), - Descriptor::new( + SplitDescriptor::new( trans_result_addr1, size_of::() as u32, VRING_DESC_F_WRITE as u16, @@ -1331,20 +1334,20 @@ mod tests { // The address range is from 0 to 0x1000_1000, set result address out of range. let result_addr_invalid_descs = [ - Descriptor::new( + SplitDescriptor::new( trans_header_addr1, size_of::() as u32, VRING_DESC_F_NEXT as u16, 0, ), - Descriptor::new(tx_buf_addr1, 30, VRING_DESC_F_NEXT as u16, 0), - Descriptor::new( + SplitDescriptor::new(tx_buf_addr1, 30, VRING_DESC_F_NEXT as u16, 0), + SplitDescriptor::new( rx_buf_addr1, 30, (VRING_DESC_F_WRITE | VRING_DESC_F_NEXT) as u16, 0, ), - Descriptor::new( + SplitDescriptor::new( 0x2000_0000, size_of::() as u32, VRING_DESC_F_WRITE as u16, diff --git a/vhost-device-template/Cargo.toml b/vhost-device-template/Cargo.toml index 29a0cef..d668d24 100644 --- a/vhost-device-template/Cargo.toml +++ b/vhost-device-template/Cargo.toml @@ -22,13 +22,13 @@ libc = "0.2" log = "0.4" thiserror = "2.0" vhost = { version = "0.14", features = ["vhost-user-backend"] } -vhost-user-backend = "0.18" +vhost-user-backend = "0.19" virtio-bindings = "0.2.5" -virtio-queue = "0.14" +virtio-queue = "0.15" vm-memory = "0.16.1" vmm-sys-util = "0.14" [dev-dependencies] assert_matches = "1.5" -virtio-queue = { version = "0.14", features = ["test-utils"] } +virtio-queue = { version = "0.15", features = ["test-utils"] } vm-memory = { version = "0.16.1", features = ["backend-mmap", "backend-atomic"] } diff --git a/vhost-device-template/src/vhu_foo.rs b/vhost-device-template/src/vhu_foo.rs index b32f2c5..53a2008 100644 --- a/vhost-device-template/src/vhu_foo.rs +++ b/vhost-device-template/src/vhu_foo.rs @@ -223,7 +223,11 @@ mod tests { use std::mem::size_of; use vhost_user_backend::{VhostUserBackendMut, VringRwLock, VringT}; use virtio_bindings::bindings::virtio_ring::{VRING_DESC_F_NEXT, VRING_DESC_F_WRITE}; - use virtio_queue::{mock::MockSplitQueue, Descriptor, Queue}; + use virtio_queue::{ + desc::{split::Descriptor as SplitDescriptor, RawDescriptor}, + mock::MockSplitQueue, + Queue, + }; use vm_memory::{Address, ByteValued, Bytes, GuestAddress, GuestMemoryAtomic, GuestMemoryMmap}; use super::*; @@ -267,7 +271,7 @@ mod tests { mut next_addr: u64, mem: &GuestMemoryLoadGuard>, buf: &mut [u8], - ) -> Vec { + ) -> Vec { let mut descriptors = Vec::new(); let mut index = 0; @@ -278,7 +282,7 @@ mod tests { c: 0x20, }; - let desc_out = Descriptor::new( + let desc_out = SplitDescriptor::new( next_addr, size_of::() as u32, VRING_DESC_F_NEXT as u16, @@ -293,7 +297,7 @@ mod tests { // Buf descriptor: optional if !buf.is_empty() { - let desc_buf = Descriptor::new( + let desc_buf = SplitDescriptor::new( next_addr, buf.len() as u32, (VRING_DESC_F_WRITE | VRING_DESC_F_NEXT) as u16, @@ -306,7 +310,7 @@ mod tests { } // In response descriptor - let desc_in = Descriptor::new( + let desc_in = SplitDescriptor::new( next_addr, size_of::() as u32, VRING_DESC_F_WRITE as u16, @@ -325,7 +329,13 @@ mod tests { let descriptors = prepare_descriptors(next_addr, &mem_handle, buf); - vq.build_desc_chain(&descriptors).unwrap(); + vq.build_desc_chain( + &descriptors + .into_iter() + .map(RawDescriptor::from) + .collect::>(), + ) + .unwrap(); // Put the descriptor index 0 in the first available ring position. mem_handle @@ -360,7 +370,9 @@ mod tests { let descriptors = prepare_descriptors(next_addr, &mem_handle, buf); for (idx, desc) in descriptors.iter().enumerate() { - vq.desc_table().store(idx as u16, *desc).unwrap(); + vq.desc_table() + .store(idx as u16, RawDescriptor::from(*desc)) + .unwrap(); } // Put the descriptor index 0 in the first available ring position. diff --git a/vhost-device-vsock/Cargo.toml b/vhost-device-vsock/Cargo.toml index 221858c..3c4b7dc 100644 --- a/vhost-device-vsock/Cargo.toml +++ b/vhost-device-vsock/Cargo.toml @@ -22,10 +22,10 @@ epoll = "4.3.2" log = "0.4" thiserror = "2.0" vhost = { version = "0.14", features = ["vhost-user-backend"] } -vhost-user-backend = "0.18" +vhost-user-backend = "0.19" virtio-bindings = "0.2.5" -virtio-queue = "0.14" -virtio-vsock = "0.8" +virtio-queue = "0.15" +virtio-vsock = "0.9" vm-memory = "0.16.1" vmm-sys-util = "0.14" figment = { version = "0.10.19", features = ["yaml"] } @@ -35,5 +35,5 @@ serde = { version = "1", features = ["derive"] } [dev-dependencies] assert_matches = "1.5" -virtio-queue = { version = "0.14", features = ["test-utils"] } +virtio-queue = { version = "0.15", features = ["test-utils"] } tempfile = "3.20.0" diff --git a/vhost-device-vsock/src/vsock_conn.rs b/vhost-device-vsock/src/vsock_conn.rs index 239203f..903b9bd 100644 --- a/vhost-device-vsock/src/vsock_conn.rs +++ b/vhost-device-vsock/src/vsock_conn.rs @@ -402,7 +402,10 @@ mod tests { use std::ops::Deref; use std::sync::{Arc, Mutex}; use virtio_bindings::bindings::virtio_ring::{VRING_DESC_F_NEXT, VRING_DESC_F_WRITE}; - use virtio_queue::{mock::MockSplitQueue, Descriptor, DescriptorChain, Queue, QueueOwnedT}; + use virtio_queue::{ + desc::split::Descriptor as SplitDescriptor, desc::RawDescriptor, mock::MockSplitQueue, + DescriptorChain, Queue, QueueOwnedT, + }; use vm_memory::{ Address, Bytes, GuestAddress, GuestAddressSpace, GuestMemoryAtomic, GuestMemoryLoadGuard, GuestMemoryMmap, @@ -457,9 +460,14 @@ mod tests { // vsock packet header // let header = vec![0 as u8; head_params.head_len]; let header = head_params.construct_head(); - let head_desc = - Descriptor::new(next_addr, head_params.head_len as u32, head_flags as u16, 1); - mem.write(&header, head_desc.addr()).unwrap(); + let head_desc = RawDescriptor::from(SplitDescriptor::new( + next_addr, + head_params.head_len as u32, + head_flags as u16, + 1, + )); + mem.write(&header, SplitDescriptor::from(head_desc).addr()) + .unwrap(); assert!(virt_queue.desc_table().store(0, head_desc).is_ok()); next_addr += head_params.head_len as u64; @@ -479,8 +487,14 @@ mod tests { } // vsock data let data = vec![0_u8; head_data_len as usize]; - let data_desc = Descriptor::new(next_addr, data.len() as u32, head_flags as u16, i + 2); - mem.write(&data, data_desc.addr()).unwrap(); + let data_desc = RawDescriptor::from(SplitDescriptor::new( + next_addr, + data.len() as u32, + head_flags as u16, + i + 2, + )); + mem.write(&data, SplitDescriptor::from(data_desc).addr()) + .unwrap(); assert!(virt_queue.desc_table().store(i + 1, data_desc).is_ok()); next_addr += head_data_len as u64; }