summary refs log tree commit diff
diff options
context:
space:
mode:
-rw-r--r--devices/src/virtio/queue.rs2
1 files changed, 2 insertions, 0 deletions
diff --git a/devices/src/virtio/queue.rs b/devices/src/virtio/queue.rs
index 153449a..21cf63e 100644
--- a/devices/src/virtio/queue.rs
+++ b/devices/src/virtio/queue.rs
@@ -317,6 +317,8 @@ impl Queue {
         let queue_size = self.actual_size();
         let avail_index_addr = mem.checked_offset(self.avail_ring, 2).unwrap();
         let avail_index: u16 = mem.read_obj_from_addr(avail_index_addr).unwrap();
+        // make sure desc_index read doesn't bypass avail_index read
+        fence(Ordering::Acquire);
         let avail_len = Wrapping(avail_index) - self.next_avail;
 
         if avail_len.0 > queue_size || self.next_avail == Wrapping(avail_index) {