Struct virtio_queue::QueueSync

source ·
pub struct QueueSync { /* private fields */ }
Expand description

Struct to maintain information and manipulate state of a virtio queue for multi-threaded context.

Example

use virtio_queue::{Queue, QueueSync, QueueT};
use vm_memory::{Bytes, GuestAddress, GuestAddressSpace, GuestMemoryMmap};

let m = &GuestMemoryMmap::<()>::from_ranges(&[(GuestAddress(0), 0x10000)]).unwrap();
let mut queue = QueueSync::new(1024).unwrap();

// First, the driver sets up the queue; this set up is done via writes on the bus (PCI, MMIO).
queue.set_size(8);
queue.set_desc_table_address(Some(0x1000), None);
queue.set_avail_ring_address(Some(0x2000), None);
queue.set_used_ring_address(Some(0x3000), None);
queue.set_ready(true);
// The user should check if the queue is valid before starting to use it.
assert!(queue.is_valid(m.memory()));

// The memory object is not embedded in the `QueueSync`, so we have to pass it as a
// parameter to the methods that access the guest memory. Examples would be:
queue.add_used(m.memory(), 1, 0x100).unwrap();
queue.needs_notification(m.memory()).unwrap();

Trait Implementations

Returns a copy of the value. Read more
Performs copy-assignment from source. Read more
Formats the value using the given formatter. Read more
Type for guard returned by Self::lock().
Construct an empty virtio queue state object with the given max_size. Read more
Check whether the queue configuration is valid.
Reset the queue to the initial state.
Get an exclusive reference to the underlying Queue object. Read more
Get the maximum size of the virtio queue.
Get the actual size configured by the guest.
Configure the queue size for the virtio queue.
Check whether the queue is ready to be processed.
Configure the queue to ready for processing state.
Set the descriptor table address for the queue. Read more
Set the available ring address for the queue. Read more
Set the used ring address for the queue. Read more
Enable/disable the VIRTIO_F_RING_EVENT_IDX feature for interrupt coalescing.
Read the idx field from the available ring. Read more
Read the idx field from the used ring. Read more
Put a used descriptor head into the used ring.
Enable notification events from the guest driver. Read more
Disable notification events from the guest driver.
Check whether a notification to the guest is needed. Read more
Return the index of the next entry in the available ring.
Set the index of the next entry in the available ring.
Return the index for the next descriptor in the used ring.
Set the index for the next descriptor in the used ring.
Return the address of the descriptor table.
Return the address of the available ring.
Return the address of the used ring.
Checks whether VIRTIO_F_RING_EVENT_IDX is negotiated. Read more
Pop and return the next available descriptor chain, or None when there are no more descriptor chains available. Read more

Auto Trait Implementations

Blanket Implementations

Gets the TypeId of self. Read more
Immutably borrows from an owned value. Read more
Mutably borrows from an owned value. Read more

Returns the argument unchanged.

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

The resulting type after obtaining ownership.
Creates owned data from borrowed data, usually by cloning. Read more
Uses borrowed data to replace owned data, usually by cloning. Read more
The type returned in the event of a conversion error.
Performs the conversion.
The type returned in the event of a conversion error.
Performs the conversion.