Skip to content

Commit 4a33adb

Browse files
authored
Merge pull request #1739 from Gelbpunkt/swap-remove
perf(virtqueue): Use swap_remove when feasible
2 parents 066e74d + 9fc71ed commit 4a33adb

File tree

1 file changed

+10
-2
lines changed
  • src/drivers/virtio/virtqueue

1 file changed

+10
-2
lines changed

src/drivers/virtio/virtqueue/mod.rs

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -415,7 +415,11 @@ impl UsedDeviceWritableBuffer {
415415
}
416416

417417
// May panic, but we have written data remaining so there should always be an item
418-
let elem = self.elems.remove(0);
418+
let elem = if self.elems.len() <= 2 {
419+
self.elems.swap_remove(0)
420+
} else {
421+
self.elems.remove(0)
422+
};
419423

420424
if let BufferElem::Sized(sized) = elem {
421425
match sized.downcast::<MaybeUninit<T>>() {
@@ -441,7 +445,11 @@ impl UsedDeviceWritableBuffer {
441445
return None;
442446
}
443447

444-
let elem = self.elems.remove(0);
448+
let elem = if self.elems.len() <= 2 {
449+
self.elems.swap_remove(0)
450+
} else {
451+
self.elems.remove(0)
452+
};
445453

446454
if let BufferElem::Vector(mut vector) = elem {
447455
let new_len = u32::min(

0 commit comments

Comments
 (0)