pub fn new(start: GuestAddress, mem: &'a GuestMemoryMmap, qsize: u16) -> Self {
            // power of 2?
            assert!(qsize > 0 && qsize & (qsize - 1) == 0);

            let mut dtable = Vec::with_capacity(qsize as usize);

            let mut end = start;

            for _ in 0..qsize {
                let d = VirtqDesc::new(end, mem);
                end = d.end();
                dtable.push(d);
            }

            const AVAIL_ALIGN: u64 = 2;

            let avail = VirtqAvail::new(end, mem, qsize, AVAIL_ALIGN);

            const USED_ALIGN: u64 = 4;

            let mut x = avail.end().0;
            x = (x + USED_ALIGN - 1) & !(USED_ALIGN - 1);

            let used = VirtqUsed::new(GuestAddress(x), mem, qsize, USED_ALIGN);

            VirtQueue {
                dtable,
                avail,
                used,
                mem,
            }
        }
// We try to make sure things are aligned properly :-s
We try to make sure things are aligned properly :-s
We try to make sure things are aligned properly : - s
pub fn new(start: GuestAddress, mem: &'a GuestMemoryMmap, qsize: u16) -> Self {
            // power of 2?
            assert!(qsize > 0 && qsize & (qsize - 1) == 0);
            let mut dtable = Vec::with_capacity(qsize as usize);
            let mut end = start;
            for _ in 0..qsize {
                let d = VirtqDesc::new(end, mem);
                end = d.end();
                dtable.push(d);
            }
            const AVAIL_ALIGN: u64 = 2;
            let avail = VirtqAvail::new(end, mem, qsize, AVAIL_ALIGN);
            const USED_ALIGN: u64 = 4;
            let mut x = avail.end().0;
            x = (x + USED_ALIGN - 1) & !(USED_ALIGN - 1);
            let used = VirtqUsed::new(GuestAddress(x), mem, qsize, USED_ALIGN);
            VirtQueue {
                dtable,
                avail,
                used,
                mem,
            }
        }
pub fn new ( start : GuestAddress , mem : & ' a GuestMemoryMmap , qsize : u16 ) -> Self { // power of 2? assert ! ( qsize 0 qsize ( qsize 1 ) 0 ) ; let mut dtable = Vec :: with_capacity ( qsize as usize ) ; let mut end = start ; for _ in 0 .. qsize { let d = VirtqDesc :: new ( end , mem ) ; end = d . end ( ) ; dtable . push ( d ) ; } const AVAIL_ALIGN : u64 = 2 ; let avail = VirtqAvail :: new ( end , mem , qsize , AVAIL_ALIGN ) ; const USED_ALIGN : u64 = 4 ; let mut x = avail . end ( ) . 0 ; x = ( x + USED_ALIGN - 1 ) & ! ( USED_ALIGN - 1 ) ; let used = VirtqUsed :: new ( GuestAddress ( x ) , mem , qsize , USED_ALIGN ) ; VirtQueue { dtable , avail , used , mem , } }
We try to make sure things are aligned properly :-s
We try to make sure things are aligned properly : - s
start
GuestAddress
mem
&'a GuestMemoryMmap
qsize
u16
start
GuestAddress
mem
&'a GuestMemoryMmap
qsize
u16