diff --git a/vm-virtio/src/transport/mmio.rs b/vm-virtio/src/transport/mmio.rs index d663baeed..3a030c5f4 100644 --- a/vm-virtio/src/transport/mmio.rs +++ b/vm-virtio/src/transport/mmio.rs @@ -170,12 +170,18 @@ impl MmioDevice { self.interrupt_status .store(state.interrupt_status, Ordering::SeqCst); self.driver_status = state.driver_status; - self.queues = state.queues.clone(); // Update virtqueues indexes for both available and used rings. if let Some(mem) = self.mem.as_ref() { let mem = mem.memory(); - for queue in self.queues.iter_mut() { + for (i, queue) in self.queues.iter_mut().enumerate() { + queue.max_size = state.queues[i].max_size; + queue.size = state.queues[i].size; + queue.ready = state.queues[i].ready; + queue.vector = state.queues[i].vector; + queue.desc_table = state.queues[i].desc_table; + queue.avail_ring = state.queues[i].avail_ring; + queue.used_ring = state.queues[i].used_ring; queue.next_avail = Wrapping( queue .used_index_from_memory(&mem) diff --git a/vm-virtio/src/transport/pci_device.rs b/vm-virtio/src/transport/pci_device.rs index 41a44c069..35e4b2f99 100755 --- a/vm-virtio/src/transport/pci_device.rs +++ b/vm-virtio/src/transport/pci_device.rs @@ -456,12 +456,18 @@ impl VirtioPciDevice { self.device_activated = state.device_activated; self.interrupt_status .store(state.interrupt_status, Ordering::SeqCst); - self.queues = state.queues.clone(); // Update virtqueues indexes for both available and used rings. if let Some(mem) = self.memory.as_ref() { let mem = mem.memory(); - for queue in self.queues.iter_mut() { + for (i, queue) in self.queues.iter_mut().enumerate() { + queue.max_size = state.queues[i].max_size; + queue.size = state.queues[i].size; + queue.ready = state.queues[i].ready; + queue.vector = state.queues[i].vector; + queue.desc_table = state.queues[i].desc_table; + queue.avail_ring = state.queues[i].avail_ring; + queue.used_ring = state.queues[i].used_ring; queue.next_avail = Wrapping( queue .used_index_from_memory(&mem)