From 3ce80bd1022ea24c7ec3cb598f1e94dd8cdba606 Mon Sep 17 00:00:00 2001 From: DeathWish5 Date: Sat, 23 Dec 2023 01:10:25 +0800 Subject: [PATCH] Bug fix: update VirtQueue avail used_event to support VIRTIO_F_EVENT_IDX --- src/queue.rs | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/src/queue.rs b/src/queue.rs index 9d1d88c2..5f20fc99 100644 --- a/src/queue.rs +++ b/src/queue.rs @@ -530,6 +530,12 @@ impl VirtQueue { } self.last_used_idx = self.last_used_idx.wrapping_add(1); + if self.event_idx { + unsafe { + (*self.avail.as_ptr()).used_event = self.last_used_idx; + } + } + Ok(len) } } @@ -759,7 +765,8 @@ struct AvailRing { /// A driver MUST NOT decrement the idx. idx: u16, ring: [u16; SIZE], - used_event: u16, // unused + /// Only used if `VIRTIO_F_EVENT_IDX` is negotiated. + used_event: u16, } /// The used ring is where the device returns buffers once it is done with them: