From 8759c3db3e9e9c106e5d80927c16bfe7692c5fb1 Mon Sep 17 00:00:00 2001 From: Sebastien Boeuf Date: Wed, 26 Jan 2022 17:16:58 +0100 Subject: [PATCH] virtio-devices: Set the AccessPlatform for every VirtioDevice Moving away from the virtio-queue mechanism for descriptor address translation. Instead, we enable the new mechanism added to every VirtioDevice implementation, by setting the AccessPlatform trait if one can be found. Signed-off-by: Sebastien Boeuf --- virtio-devices/src/transport/pci_device.rs | 18 ++++++++++-------- 1 file changed, 10 insertions(+), 8 deletions(-) diff --git a/virtio-devices/src/transport/pci_device.rs b/virtio-devices/src/transport/pci_device.rs index 2854a966c..d56afbbcb 100644 --- a/virtio-devices/src/transport/pci_device.rs +++ b/virtio-devices/src/transport/pci_device.rs @@ -352,23 +352,25 @@ impl VirtioPciDevice { use_64bit_bar: bool, ) -> Result { let device_clone = device.clone(); - let locked_device = device_clone.lock().unwrap(); + let mut locked_device = device_clone.lock().unwrap(); let mut queue_evts = Vec::new(); for _ in locked_device.queue_max_sizes().iter() { queue_evts.push(EventFd::new(EFD_NONBLOCK)?) } let num_queues = locked_device.queue_max_sizes().len(); + + if let Some(access_platform) = &access_platform { + locked_device.set_access_platform(access_platform.clone()); + } + let queues = locked_device .queue_max_sizes() .iter() .map(|&s| { - let mut queue = - Queue::, virtio_queue::QueueState>::new( - memory.clone(), - s, - ); - queue.state.access_platform = access_platform.clone(); - queue + Queue::, virtio_queue::QueueState>::new( + memory.clone(), + s, + ) }) .collect();