Fix VIrtqueue bug

This commit is contained in:
Yuke Peng
2023-10-12 09:40:51 +08:00
committed by Tate, Hongliang Tian
parent 342bbdc0c4
commit 0ba24e90db

View File

@ -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::<u16>().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::<u16>();
ring_slot_ptr.add(avail_slot as usize);
ring_slot_ptr.write(&head).unwrap();
}
// write barrier
fence(Ordering::SeqCst);