Skip to main content

VmExit

Enum VmExit 

Source
#[non_exhaustive]
pub enum VmExit { Mmio { addr: u64, write: bool, data: ExitData, }, Pio { port: u16, write: bool, data: ExitData, }, Hypercall { func: u64, args: [u64; 6], }, Wfi, Wfe, Hlt, Reset, Shutdown, Debug(DebugInfo), InternalError(String), }
Expand description

The reason a vCPU returned from its run loop.

Variants (Non-exhaustive)§

This enum is marked as non-exhaustive
Non-exhaustive enums could have additional variants added in future. Therefore, when matching against variants of non-exhaustive enums, an extra wildcard arm must be added to account for any future variants.
§

Mmio

Memory-mapped I/O access. The MMIO bus router in squib-vmm dispatches to the appropriate device emulation.

Fields

§addr: u64

The guest-physical address being accessed.

§write: bool

true for a write, false for a read.

§data: ExitData

Payload bytes (read: filled by the device; write: the bytes the guest wrote).

§

Pio

Port-mapped I/O access. x86-only; on other architectures this variant never appears.

Fields

§port: u16

The I/O port number.

§write: bool

true for OUT, false for IN.

§data: ExitData

Payload bytes (1, 2, or 4 wide).

§

Hypercall

The guest issued a hypercall (HVC on aarch64, VMCALL on x86).

Fields

§func: u64

Hypercall function number.

§args: [u64; 6]

Up to six argument registers from the calling convention.

§

Wfi

The guest executed WFI (wait-for-interrupt). The vCPU should sleep until an interrupt is injected.

§

Wfe

The guest executed WFE (wait-for-event). x86’s HLT maps to VmExit::Hlt instead.

§

Hlt

The guest executed HLT (x86). Equivalent to WFI in practice.

§

Reset

The guest issued a system reset.

§

Shutdown

The guest powered down.

§

Debug(DebugInfo)

A debug exception (single-step, breakpoint). Surfaced when the optional gdb feature is wired up; otherwise the backend treats this as an internal error.

§

InternalError(String)

The hypervisor reported an internal failure that does not fit any of the above variants. The string is for human consumption only; programmatic consumers should treat this as fatal.

Trait Implementations§

Source§

impl Clone for VmExit

Source§

fn clone(&self) -> VmExit

Returns a duplicate of the value. Read more
1.0.0 (const: unstable) · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for VmExit

Source§

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

Formats the value using the given formatter. Read more

Auto Trait Implementations§

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
Source§

impl<T> CloneToUninit for T
where T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
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> ToOwned for T
where T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

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

Source§

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>,

Source§

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.