From c622b43f85760c85e70a0734e14302d0c6db803f Mon Sep 17 00:00:00 2001 From: Sebastien Boeuf Date: Thu, 12 May 2022 15:26:44 +0200 Subject: [PATCH] vm-virtio: Provide a way to clone a Queue Since the QueueState structure has been updated by not implementing Clone anymore, we need a way to keep cloning the Queue. Signed-off-by: Sebastien Boeuf --- vm-virtio/src/lib.rs | 25 ++++++++++++++++++++++++- 1 file changed, 24 insertions(+), 1 deletion(-) diff --git a/vm-virtio/src/lib.rs b/vm-virtio/src/lib.rs index 6cf28f5a7..a84959168 100644 --- a/vm-virtio/src/lib.rs +++ b/vm-virtio/src/lib.rs @@ -12,8 +12,10 @@ use std::fmt::{self, Debug}; use std::sync::Arc; +use virtio_queue::Queue; +use vm_memory::{bitmap::AtomicBitmap, GuestAddress, GuestMemoryAtomic}; -use vm_memory::GuestAddress; +type GuestMemoryMmap = vm_memory::GuestMemoryMmap; pub mod queue; pub use queue::*; @@ -121,3 +123,24 @@ impl Translatable for GuestAddress { } } } + +/// Helper for cloning a Queue since QueueState doesn't derive Clone +pub fn clone_queue( + queue: &Queue>, +) -> Queue> { + Queue::, virtio_queue::QueueState> { + mem: queue.mem.clone(), + state: virtio_queue::QueueState { + max_size: queue.state.max_size, + next_avail: queue.state.next_avail, + next_used: queue.state.next_used, + event_idx_enabled: queue.state.event_idx_enabled, + signalled_used: queue.state.signalled_used, + size: queue.state.size, + ready: queue.state.ready, + desc_table: queue.state.desc_table, + avail_ring: queue.state.avail_ring, + used_ring: queue.state.used_ring, + }, + } +}