Struct virtio_queue::QueueStateSync
source · [−]pub struct QueueStateSync { /* private fields */ }
Expand description
Struct to maintain information and manipulate state of a virtio queue for multi-threaded context.
Example
use virtio_queue::{Queue, QueueState, QueueStateSync, QueueStateT};
use vm_memory::{Bytes, GuestAddress, GuestAddressSpace, GuestMemoryMmap};
let m = &GuestMemoryMmap::<()>::from_ranges(&[(GuestAddress(0), 0x10000)]).unwrap();
let mut queue = QueueStateSync::new(1024);
// 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 `QueueStateSync`, 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
sourceimpl Clone for QueueStateSync
impl Clone for QueueStateSync
sourcefn clone(&self) -> QueueStateSync
fn clone(&self) -> QueueStateSync
Returns a copy of the value. Read more
1.0.0 · sourcefn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
Performs copy-assignment from source
. Read more
sourceimpl Debug for QueueStateSync
impl Debug for QueueStateSync
sourceimpl<'a> QueueStateGuard<'a> for QueueStateSync
impl<'a> QueueStateGuard<'a> for QueueStateSync
type G = MutexGuard<'a, QueueState>
type G = MutexGuard<'a, QueueState>
Type for guard returned by Self::lock()
.
sourceimpl QueueStateT for QueueStateSync
impl QueueStateT for QueueStateSync
sourcefn new(max_size: u16) -> Self
fn new(max_size: u16) -> Self
Construct an empty virtio queue state object with the given max_size
.
sourcefn is_valid<M: GuestMemory>(&self, mem: &M) -> bool
fn is_valid<M: GuestMemory>(&self, mem: &M) -> bool
Check whether the queue configuration is valid.
sourcefn lock(&mut self) -> <Self as QueueStateGuard<'_>>::G
fn lock(&mut self) -> <Self as QueueStateGuard<'_>>::G
Get an exclusive reference to the underlying QueueState
object. Read more
sourcefn set_desc_table_address(&mut self, low: Option<u32>, high: Option<u32>)
fn set_desc_table_address(&mut self, low: Option<u32>, high: Option<u32>)
Set the descriptor table address for the queue. Read more
sourcefn set_avail_ring_address(&mut self, low: Option<u32>, high: Option<u32>)
fn set_avail_ring_address(&mut self, low: Option<u32>, high: Option<u32>)
Set the available ring address for the queue. Read more
sourcefn set_used_ring_address(&mut self, low: Option<u32>, high: Option<u32>)
fn set_used_ring_address(&mut self, low: Option<u32>, high: Option<u32>)
Set the used ring address for the queue. Read more
sourcefn set_event_idx(&mut self, enabled: bool)
fn set_event_idx(&mut self, enabled: bool)
Enable/disable the VIRTIO_F_RING_EVENT_IDX feature for interrupt coalescing.
sourcefn avail_idx<M: GuestMemory>(
&self,
mem: &M,
order: Ordering
) -> Result<Wrapping<u16>, Error>
fn avail_idx<M: GuestMemory>(
&self,
mem: &M,
order: Ordering
) -> Result<Wrapping<u16>, Error>
Read the idx
field from the available ring.
sourcefn used_idx<M: GuestMemory>(
&self,
mem: &M,
order: Ordering
) -> Result<Wrapping<u16>, Error>
fn used_idx<M: GuestMemory>(
&self,
mem: &M,
order: Ordering
) -> Result<Wrapping<u16>, Error>
Read the idx
field from the used ring.
sourcefn add_used<M: GuestMemory>(
&mut self,
mem: &M,
head_index: u16,
len: u32
) -> Result<(), Error>
fn add_used<M: GuestMemory>(
&mut self,
mem: &M,
head_index: u16,
len: u32
) -> Result<(), Error>
Put a used descriptor head into the used ring.
sourcefn enable_notification<M: GuestMemory>(
&mut self,
mem: &M
) -> Result<bool, Error>
fn enable_notification<M: GuestMemory>(
&mut self,
mem: &M
) -> Result<bool, Error>
Enable notification events from the guest driver. Read more
sourcefn disable_notification<M: GuestMemory>(&mut self, mem: &M) -> Result<(), Error>
fn disable_notification<M: GuestMemory>(&mut self, mem: &M) -> Result<(), Error>
Disable notification events from the guest driver.
sourcefn needs_notification<M: GuestMemory>(&mut self, mem: &M) -> Result<bool, Error>
fn needs_notification<M: GuestMemory>(&mut self, mem: &M) -> Result<bool, Error>
Check whether a notification to the guest is needed. Read more
sourcefn next_avail(&self) -> u16
fn next_avail(&self) -> u16
Return the index of the next entry in the available ring.
sourcefn set_next_avail(&mut self, next_avail: u16)
fn set_next_avail(&mut self, next_avail: u16)
Set the index of the next entry in the available ring.
sourcefn set_next_used(&mut self, next_used: u16)
fn set_next_used(&mut self, next_used: u16)
Set the index for the next descriptor in the used ring.
sourcefn lock_with_memory<M>(
&mut self,
mem: M
) -> QueueGuard<M, <Self as QueueStateGuard<'_>>::G> where
M: Deref + Clone,
M::Target: GuestMemory + Sized,
fn lock_with_memory<M>(
&mut self,
mem: M
) -> QueueGuard<M, <Self as QueueStateGuard<'_>>::G> where
M: Deref + Clone,
M::Target: GuestMemory + Sized,
Get an exclusive reference to the underlying QueueState
object with an associated
GuestMemory
object. Read more
Auto Trait Implementations
impl RefUnwindSafe for QueueStateSync
impl Send for QueueStateSync
impl Sync for QueueStateSync
impl Unpin for QueueStateSync
impl UnwindSafe for QueueStateSync
Blanket Implementations
sourceimpl<T> BorrowMut<T> for T where
T: ?Sized,
impl<T> BorrowMut<T> for T where
T: ?Sized,
const: unstable · sourcefn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Mutably borrows from an owned value. Read more
sourceimpl<T> ToOwned for T where
T: Clone,
impl<T> ToOwned for T where
T: Clone,
type Owned = T
type Owned = T
The resulting type after obtaining ownership.
sourcefn clone_into(&self, target: &mut T)
fn clone_into(&self, target: &mut T)
toowned_clone_into
)Uses borrowed data to replace owned data, usually by cloning. Read more