Enum devices::virtio::Queue

source ·
pub enum Queue {
    SplitVirtQueue(SplitQueue),
    PackedVirtQueue(PackedQueue),
}
Expand description

Virtqueue interface representing different types of virtqueues The struct of each queue type is wrapped in the enum variants

Variants§

Implementations§

source§

impl Queue

source

pub const MAX_SIZE: u16 = 32_768u16

Largest valid number of entries in a virtqueue.

source

pub async fn next_async( &mut self, eventfd: &mut EventAsync ) -> Result<DescriptorChain, AsyncError>

Asynchronously read the next descriptor chain from the queue. Returns a DescriptorChain when it is awaited.

source

pub fn peek(&mut self) -> Option<PeekedDescriptorChain<'_>>

Get the first available descriptor chain without removing it from the queue. Call pop() on the returned PeekedDescriptorChain to remove it from the queue.

source

pub fn pop(&mut self) -> Option<DescriptorChain>

If a new DescriptorChain is available, returns one and removes it from the queue.

source

pub async fn next_async_interruptable( &mut self, queue_event: &mut EventAsync, stop_rx: &mut Receiver<()> ) -> Result<Option<DescriptorChain>, AsyncError>

Returns None if stop_rx receives a value; otherwise returns the result of waiting for the next descriptor.

source

pub fn trigger_interrupt(&mut self) -> bool

inject interrupt into guest on this queue return true: interrupt is injected into guest for this queue false: interrupt isn’t injected

source

pub fn restore( queue_config: &QueueConfig, queue_value: Value, mem: &GuestMemory, event: Event, interrupt: Interrupt ) -> Result<Queue>

Restore queue from snapshot

source

pub fn vhost_user_reclaim(&mut self, vring_base: u16)

“Reclaim” a queue that was given to a vhost-user backend and is now being taken back using VHOST_USER_GET_VRING_BASE.

The Queue will have stale fields if the vhost-user backend fulfilled any virtqueue requests. This function updates the Queue to pick up where the backend left off.

source

pub fn next_avail_to_process(&self) -> u16

Getter for the next index of the available ring that device will process.

Not to be confused with the available ring’s index field, which is the next index for the driver to fill.

source

pub fn vector(&self) -> u16

Getter for vector field

source

pub fn desc_table(&self) -> GuestAddress

Getter for descriptor area

source

pub fn avail_ring(&self) -> GuestAddress

Getter for driver area

source

pub fn used_ring(&self) -> GuestAddress

Getter for device area

source

pub fn size(&self) -> u16

Return the actual size of the queue, as the driver may not set up a queue as big as the device allows.

source

pub fn event(&self) -> &Event

Get a reference to the queue’s event.

source

pub fn interrupt(&self) -> &Interrupt

Get a reference to the queue’s interrupt.

source

pub fn add_used(&mut self, desc_chain: DescriptorChain, len: u32)

Puts an available descriptor head into the used ring for use by the guest.

source

pub fn snapshot(&self) -> Result<Value>

Take snapshot of queue’s current status

Trait Implementations§

source§

impl Debug for Queue

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more

Auto Trait Implementations§

§

impl !RefUnwindSafe for Queue

§

impl Send for Queue

§

impl Sync for Queue

§

impl Unpin for Queue

§

impl !UnwindSafe for Queue

Blanket Implementations§

source§

impl<T> Any for T
where T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for T
where T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
§

impl<T> Downcast for T
where T: Any,

§

fn into_any(self: Box<T>) -> Box<dyn Any>

Convert Box<dyn Trait> (where Trait: Downcast) to Box<dyn Any>. Box<dyn Any> can then be further downcast into Box<ConcreteType> where ConcreteType implements Trait.
§

fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>

Convert Rc<Trait> (where Trait: Downcast) to Rc<Any>. Rc<Any> can then be further downcast into Rc<ConcreteType> where ConcreteType implements Trait.
§

fn as_any(&self) -> &(dyn Any + 'static)

Convert &Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot generate &Any’s vtable from &Trait’s.
§

fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)

Convert &mut Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot generate &mut Any’s vtable from &mut Trait’s.
§

impl<T> DowncastSync for T
where T: Any + Send + Sync,

§

fn into_any_arc(self: Arc<T>) -> Arc<dyn Any + Send + Sync>

Convert Arc<Trait> (where Trait: Downcast) to Arc<Any>. Arc<Any> can then be further downcast into Arc<ConcreteType> where ConcreteType implements Trait.
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

source§

impl<T, U> Into<U> for T
where U: From<T>,

source§

fn into(self) -> U

Calls U::from(self).

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

source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

§

type Error = Infallible

The type returned in the event of a conversion error.
source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for T
where V: MultiLane<T>,

§

fn vzip(self) -> V