Skip to content

Commit 8411546

Browse files
committed
feat(queue): add discard_used method
Add `discard_used` method to discard last `n` used elements in the used ring by setting their `len` to 0. Signed-off-by: Egor Lazarchuk <[email protected]>
1 parent b6c264c commit 8411546

File tree

1 file changed

+15
-0
lines changed

1 file changed

+15
-0
lines changed

src/vmm/src/devices/virtio/queue.rs

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -468,6 +468,21 @@ impl Queue {
468468
self.set_used_ring_idx(self.next_used.0, mem);
469469
}
470470

471+
/// Discards last `n` descriptors by setting their len to 0.
472+
pub fn discard_used<M: GuestMemory>(&mut self, mem: &M, n: u16) {
473+
// `next_used` is pointing to the next descriptor index.
474+
// So we use range 1..n + 1 to get indexes of last n descriptors.
475+
for i in 1..n + 1 {
476+
let next_used_index = self.next_used - Wrapping(i);
477+
let mut used_element = self.read_used_ring(mem, next_used_index.0);
478+
used_element.len = 0;
479+
// SAFETY:
480+
// This should never panic as we only update len of the used_element.
481+
self.write_used_ring(mem, next_used_index.0, used_element)
482+
.unwrap();
483+
}
484+
}
485+
471486
/// Read used element from a used ring at specified index.
472487
#[inline(always)]
473488
pub fn read_used_ring<M: GuestMemory>(&self, mem: &M, index: u16) -> UsedElement {

0 commit comments

Comments
 (0)