From 0ba24e90db816f98bef02cff9ea06bb8b1a10d1f Mon Sep 17 00:00:00 2001 From: Yuke Peng Date: Thu, 12 Oct 2023 09:40:51 +0800 Subject: [PATCH] Fix VIrtqueue bug --- services/comps/virtio/src/queue.rs | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/services/comps/virtio/src/queue.rs b/services/comps/virtio/src/queue.rs index 38ba9298d..b2d6c488c 100644 --- a/services/comps/virtio/src/queue.rs +++ b/services/comps/virtio/src/queue.rs @@ -170,9 +170,10 @@ impl VirtQueue { let avail_slot = self.avail_idx & (self.queue_size - 1); { - let mut ring_ptr = field_ptr!(&self.avail, AvailRing, ring); - ring_ptr.byte_add(offset_of!(AvailRing, ring) as usize + avail_slot as usize * 2); - ring_ptr.cast::().write(&self.avail_idx).unwrap(); + let ring_ptr: SafePtr<[u16; 64], &VmFrame> = field_ptr!(&self.avail, AvailRing, ring); + let mut ring_slot_ptr = ring_ptr.cast::(); + ring_slot_ptr.add(avail_slot as usize); + ring_slot_ptr.write(&head).unwrap(); } // write barrier fence(Ordering::SeqCst);