diff --git a/Cargo.lock b/Cargo.lock index 103de3b..11fe8a3 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -313,7 +313,7 @@ dependencies = [ "libc", "libgpiod-sys", "thiserror", - "vmm-sys-util 0.10.0", + "vmm-sys-util", ] [[package]] @@ -579,18 +579,6 @@ version = "0.9.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "49874b5167b65d7193b8aba1567f5c7d93d001cafc34600cee003eda787e483f" -[[package]] -name = "vhost" -version = "0.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3b56bf8f178fc500fe14505fca8b00dec76fc38f2304f461c8d9d7547982311d" -dependencies = [ - "bitflags", - "libc", - "vm-memory 0.9.0", - "vmm-sys-util 0.10.0", -] - [[package]] name = "vhost" version = "0.5.0" @@ -599,8 +587,8 @@ checksum = "79243657c76e5c90dcbf60187c842614f6dfc7123972c55bb3bcc446792aca93" dependencies = [ "bitflags", "libc", - "vm-memory 0.9.0", - "vmm-sys-util 0.10.0", + "vm-memory", + "vmm-sys-util", ] [[package]] @@ -613,12 +601,12 @@ dependencies = [ "libgpiod", "log", "thiserror", - "vhost 0.5.0", - "vhost-user-backend 0.7.0", + "vhost", + "vhost-user-backend", "virtio-bindings", - "virtio-queue 0.6.1", - "vm-memory 0.9.0", - "vmm-sys-util 0.10.0", + "virtio-queue", + "vm-memory", + "vmm-sys-util", ] [[package]] @@ -630,12 +618,12 @@ dependencies = [ "libc", "log", "thiserror", - "vhost 0.5.0", - "vhost-user-backend 0.7.0", + "vhost", + "vhost-user-backend", "virtio-bindings", - "virtio-queue 0.6.1", - "vm-memory 0.9.0", - "vmm-sys-util 0.10.0", + "virtio-queue", + "vm-memory", + "vmm-sys-util", ] [[package]] @@ -650,27 +638,12 @@ dependencies = [ "rand", "tempfile", "thiserror", - "vhost 0.5.0", - "vhost-user-backend 0.7.0", + "vhost", + "vhost-user-backend", "virtio-bindings", - "virtio-queue 0.6.1", - "vm-memory 0.9.0", - "vmm-sys-util 0.10.0", -] - -[[package]] -name = "vhost-user-backend" -version = "0.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a8db00e93514caa8987bb8b536fe962c9b66b4068583abc4c531eb97988477cd" -dependencies = [ - "libc", - "log", - "vhost 0.3.0", - "virtio-bindings", - "virtio-queue 0.1.0", - "vm-memory 0.7.0", - "vmm-sys-util 0.9.0", + "virtio-queue", + "vm-memory", + "vmm-sys-util", ] [[package]] @@ -681,11 +654,11 @@ checksum = "6a0fc7d5f8e2943cd9f2ecd58be3f2078add863a49573d14dd9d64e1ab26544c" dependencies = [ "libc", "log", - "vhost 0.5.0", + "vhost", "virtio-bindings", - "virtio-queue 0.6.1", - "vm-memory 0.9.0", - "vmm-sys-util 0.10.0", + "virtio-queue", + "vm-memory", + "vmm-sys-util", ] [[package]] @@ -698,12 +671,12 @@ dependencies = [ "futures", "log", "thiserror", - "vhost 0.3.0", - "vhost-user-backend 0.1.0", + "vhost", + "vhost-user-backend", "virtio-bindings", - "virtio-queue 0.1.0", - "vm-memory 0.7.0", - "vmm-sys-util 0.9.0", + "virtio-queue", + "vm-memory", + "vmm-sys-util", ] [[package]] @@ -712,17 +685,6 @@ version = "0.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3ff512178285488516ed85f15b5d0113a7cdb89e9e8a760b269ae4f02b84bd6b" -[[package]] -name = "virtio-queue" -version = "0.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f90da9e627f6aaf667cc7b6548a28be332d3e1f058f4ceeb46ab6bcee5c4b74d" -dependencies = [ - "log", - "vm-memory 0.7.0", - "vmm-sys-util 0.10.0", -] - [[package]] name = "virtio-queue" version = "0.6.1" @@ -731,19 +693,8 @@ checksum = "435dd49c7b38419729afd43675850c7b5dc4728f2fabd70c7a9079a331e4f8c6" dependencies = [ "log", "virtio-bindings", - "vm-memory 0.9.0", - "vmm-sys-util 0.10.0", -] - -[[package]] -name = "vm-memory" -version = "0.7.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "339d4349c126fdcd87e034631d7274370cf19eb0e87b33166bcd956589fc72c5" -dependencies = [ - "arc-swap", - "libc", - "winapi", + "vm-memory", + "vmm-sys-util", ] [[package]] @@ -757,16 +708,6 @@ dependencies = [ "winapi", ] -[[package]] -name = "vmm-sys-util" -version = "0.9.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "733537bded03aaa93543f785ae997727b30d1d9f4a03b7861d23290474242e11" -dependencies = [ - "bitflags", - "libc", -] - [[package]] name = "vmm-sys-util" version = "0.10.0" diff --git a/vsock/Cargo.toml b/vsock/Cargo.toml index 54b488b..282c116 100644 --- a/vsock/Cargo.toml +++ b/vsock/Cargo.toml @@ -14,14 +14,14 @@ byteorder = "1" clap = { version = ">=3.0", features = ["yaml"] } epoll = "4.3.1" futures = { version = "0.3", features = ["thread-pool"] } -log = "0.4.14" +log = ">=0.4.6" thiserror = "1.0" -vhost = { version = "0.3", features = ["vhost-user-slave"] } -vhost-user-backend = "0.1" +vhost = { version = "0.5", features = ["vhost-user-slave"] } +vhost-user-backend = "0.7.0" virtio-bindings = ">=0.1" -virtio-queue = "0.1" -vm-memory = "0.7" -vmm-sys-util = "=0.9.0" +virtio-queue = "0.6" +vm-memory = ">=0.8" +vmm-sys-util = "=0.10.0" [dev-dependencies] -virtio-queue = { version = "0.1", features = ["test-utils"] } +virtio-queue = { version = "0.6", features = ["test-utils"] } diff --git a/vsock/src/packet.rs b/vsock/src/packet.rs index b3b9164..b30686a 100644 --- a/vsock/src/packet.rs +++ b/vsock/src/packet.rs @@ -360,11 +360,8 @@ pub mod tests { use crate::vhu_vsock::{VSOCK_OP_RW, VSOCK_TYPE_STREAM}; use super::*; - use virtio_queue::{ - defs::{VIRTQ_DESC_F_NEXT, VIRTQ_DESC_F_WRITE}, - mock::MockSplitQueue, - Descriptor, - }; + use virtio_bindings::bindings::virtio_ring::{VRING_DESC_F_NEXT, VRING_DESC_F_WRITE}; + use virtio_queue::{mock::MockSplitQueue, Descriptor, Queue, QueueOwnedT}; use vm_memory::{Address, Bytes, GuestAddress, GuestMemoryAtomic, GuestMemoryMmap}; pub struct HeadParams { @@ -400,11 +397,11 @@ pub mod tests { let mut flags = 0; if write_only { - flags |= VIRTQ_DESC_F_WRITE; + flags |= VRING_DESC_F_WRITE; } let mut head_flags = if data_chain_len > 0 { - flags | VIRTQ_DESC_F_NEXT + flags | VRING_DESC_F_NEXT } else { flags }; @@ -412,9 +409,10 @@ pub 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, 1); + 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(); - virt_queue.desc_table().store(0, head_desc); + assert!(virt_queue.desc_table().store(0, head_desc).is_ok()); next_addr += head_params.head_len as u64; // Put the descriptor index 0 in the first available ring position. @@ -429,13 +427,13 @@ pub mod tests { for i in 0..(data_chain_len) { // last descr in chain if i == data_chain_len - 1 { - head_flags &= !VIRTQ_DESC_F_NEXT; + head_flags &= !VRING_DESC_F_NEXT; } // 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, i + 2); + let data_desc = Descriptor::new(next_addr, data.len() as u32, head_flags as u16, i + 2); mem.write(&data, data_desc.addr()).unwrap(); - virt_queue.desc_table().store(i + 1, data_desc); + assert!(virt_queue.desc_table().store(i + 1, data_desc).is_ok()); next_addr += head_data_len as u64; } @@ -443,8 +441,9 @@ pub mod tests { ( GuestMemoryAtomic::new(mem.clone()), virt_queue - .create_queue(GuestMemoryAtomic::::new(mem.clone())) - .iter() + .create_queue::() + .unwrap() + .iter(GuestMemoryAtomic::new(mem.clone()).memory()) .unwrap() .next() .unwrap(), diff --git a/vsock/src/vhu_vsock_thread.rs b/vsock/src/vhu_vsock_thread.rs index aacae72..796f6ce 100644 --- a/vsock/src/vhu_vsock_thread.rs +++ b/vsock/src/vhu_vsock_thread.rs @@ -19,7 +19,8 @@ use std::{ sync::{Arc, RwLock}, }; use vhost_user_backend::{VringEpollHandler, VringRwLock, VringT}; -use vm_memory::{GuestMemoryAtomic, GuestMemoryMmap}; +use virtio_queue::QueueOwnedT; +use vm_memory::{GuestAddressSpace, GuestMemoryAtomic, GuestMemoryMmap}; use vmm_sys_util::{ epoll::EventSet, eventfd::{EventFd, EFD_NONBLOCK}, @@ -374,7 +375,11 @@ impl VhostUserVsockThread { let queue = vring_mut.get_queue_mut(); - while let Some(mut avail_desc) = queue.iter().map_err(|_| Error::IterateQueue)?.next() { + while let Some(mut avail_desc) = queue + .iter(atomic_mem.memory()) + .map_err(|_| Error::IterateQueue)? + .next() + { used_any = true; let atomic_mem = atomic_mem.clone(); @@ -385,7 +390,10 @@ impl VhostUserVsockThread { if self.thread_backend.recv_pkt(&mut pkt).is_ok() { pkt.hdr().len() + pkt.len() as usize } else { - queue.iter().unwrap().go_to_previous_position(); + queue + .iter(atomic_mem.memory()) + .unwrap() + .go_to_previous_position(); break; } } @@ -471,7 +479,7 @@ impl VhostUserVsockThread { while let Some(mut avail_desc) = vring .get_mut() .get_queue_mut() - .iter() + .iter(atomic_mem.memory()) .map_err(|_| Error::IterateQueue)? .next() { @@ -491,7 +499,7 @@ impl VhostUserVsockThread { vring .get_mut() .get_queue_mut() - .iter() + .iter(atomic_mem.memory()) .unwrap() .go_to_previous_position(); break;