Skip to main content

VmxExitReason

Enum VmxExitReason 

Source
#[repr(u32)]
pub enum VmxExitReason {
Show 67 variants EXCEPTION_NMI = 0, EXTERNAL_INTERRUPT = 1, TRIPLE_FAULT = 2, INIT = 3, SIPI = 4, SMI = 5, OTHER_SMI = 6, INTERRUPT_WINDOW = 7, NMI_WINDOW = 8, TASK_SWITCH = 9, CPUID = 10, GETSEC = 11, HLT = 12, INVD = 13, INVLPG = 14, RDPMC = 15, RDTSC = 16, RSM = 17, VMCALL = 18, VMCLEAR = 19, VMLAUNCH = 20, VMPTRLD = 21, VMPTRST = 22, VMREAD = 23, VMRESUME = 24, VMWRITE = 25, VMOFF = 26, VMON = 27, CR_ACCESS = 28, DR_ACCESS = 29, IO_INSTRUCTION = 30, MSR_READ = 31, MSR_WRITE = 32, INVALID_GUEST_STATE = 33, MSR_LOAD_FAIL = 34, MWAIT_INSTRUCTION = 36, MONITOR_TRAP_FLAG = 37, MONITOR_INSTRUCTION = 39, PAUSE_INSTRUCTION = 40, MCE_DURING_VMENTRY = 41, TPR_BELOW_THRESHOLD = 43, APIC_ACCESS = 44, VIRTUALIZED_EOI = 45, GDTR_IDTR = 46, LDTR_TR = 47, EPT_VIOLATION = 48, EPT_MISCONFIG = 49, INVEPT = 50, RDTSCP = 51, PREEMPTION_TIMER = 52, INVVPID = 53, WBINVD = 54, XSETBV = 55, APIC_WRITE = 56, RDRAND = 57, INVPCID = 58, VMFUNC = 59, ENCLS = 60, RDSEED = 61, PML_FULL = 62, XSAVES = 63, XRSTORS = 64, PCONFIG = 65, SPP_EVENT = 66, UMWAIT = 67, TPAUSE = 68, LOADIWKEY = 69,
}
Expand description

VMX basic exit reasons.

See Intel SDM, Vol. 3D, Appendix C, Table C-1

Variants§

§

EXCEPTION_NMI = 0

An exception selected by the exception bitmap, or an intercepted NMI.

§

EXTERNAL_INTERRUPT = 1

An external interrupt with external-interrupt exiting enabled.

§

TRIPLE_FAULT = 2

An exception during double-fault delivery that was not intercepted.

§

INIT = 3

Receipt of an INIT signal.

§

SIPI = 4

Receipt of a startup IPI while waiting for SIPI.

§

SMI = 5

An SMM VM exit caused by an SMI immediately after an I/O instruction retires.

§

OTHER_SMI = 6

An SMM VM exit caused by an SMI not immediately following I/O instruction retirement.

§

INTERRUPT_WINDOW = 7

An interrupt window with RFLAGS.IF set, no STI or MOV SS blocking, and interrupt-window exiting enabled.

§

NMI_WINDOW = 8

An NMI window with no virtual-NMI or MOV SS blocking and NMI-window exiting enabled.

§

TASK_SWITCH = 9

A task switch attempted by the guest.

§

CPUID = 10

An attempt to execute CPUID.

§

GETSEC = 11

An attempt to execute GETSEC.

§

HLT = 12

An intercepted HLT instruction.

§

INVD = 13

An attempt to execute INVD.

§

INVLPG = 14

An intercepted INVLPG instruction.

§

RDPMC = 15

An intercepted RDPMC instruction.

§

RDTSC = 16

An intercepted RDTSC instruction.

§

RSM = 17

An attempt to execute RSM in SMM.

§

VMCALL = 18

A VMCALL from the guest or the executive monitor.

§

VMCLEAR = 19

An attempt to execute VMCLEAR.

§

VMLAUNCH = 20

An attempt to execute VMLAUNCH.

§

VMPTRLD = 21

An attempt to execute VMPTRLD.

§

VMPTRST = 22

An attempt to execute VMPTRST.

§

VMREAD = 23

An attempt to execute VMREAD.

§

VMRESUME = 24

An attempt to execute VMRESUME.

§

VMWRITE = 25

An attempt to execute VMWRITE.

§

VMOFF = 26

An attempt to execute VMXOFF.

§

VMON = 27

An attempt to execute VMXON.

§

CR_ACCESS = 28

An intercepted access to CR0, CR3, CR4, or CR8 via CLTS, LMSW, or MOV CR.

§

DR_ACCESS = 29

An intercepted MOV to or from a debug register.

§

IO_INSTRUCTION = 30

An I/O instruction intercepted by I/O exiting controls or the I/O bitmaps.

§

MSR_READ = 31

An intercepted RDMSR instruction.

§

MSR_WRITE = 32

An intercepted WRMSR or WRMSRNS instruction.

§

INVALID_GUEST_STATE = 33

A VM-entry failure caused by invalid guest state.

§

MSR_LOAD_FAIL = 34

A VM-entry failure while loading guest MSRs.

§

MWAIT_INSTRUCTION = 36

An intercepted MWAIT instruction.

§

MONITOR_TRAP_FLAG = 37

A monitor-trap-flag exit enabled by VM controls or injected on VM entry.

§

MONITOR_INSTRUCTION = 39

An intercepted MONITOR instruction.

§

PAUSE_INSTRUCTION = 40

An intercepted PAUSE instruction or a pause loop exceeding PLE_Window.

§

MCE_DURING_VMENTRY = 41

A machine-check event during VM entry.

§

TPR_BELOW_THRESHOLD = 43

A virtual TPR priority below the configured threshold while TPR shadowing is enabled.

§

APIC_ACCESS = 44

An intercepted memory access to the APIC-access page.

§

VIRTUALIZED_EOI = 45

A virtual EOI for an interrupt selected by the EOI-exit bitmap.

§

GDTR_IDTR = 46

An intercepted LGDT, LIDT, SGDT, or SIDT instruction.

§

LDTR_TR = 47

An intercepted LLDT, LTR, SLDT, or STR instruction.

§

EPT_VIOLATION = 48

A guest physical memory access denied by the EPT paging structures.

§

EPT_MISCONFIG = 49

A guest physical memory access encountering an invalid EPT entry.

§

INVEPT = 50

An attempt to execute INVEPT.

§

RDTSCP = 51

An intercepted RDTSCP instruction.

§

PREEMPTION_TIMER = 52

Expiration of the VMX preemption timer.

§

INVVPID = 53

An attempt to execute INVVPID.

§

WBINVD = 54

An intercepted WBINVD or WBNOINVD instruction.

§

XSETBV = 55

An attempt to execute XSETBV.

§

APIC_WRITE = 56

A completed write to the virtual-APIC page requiring VMM emulation.

§

RDRAND = 57

An intercepted RDRAND instruction.

§

INVPCID = 58

An intercepted INVPCID instruction.

§

VMFUNC = 59

A VMFUNC for a disabled function or a function-specific exit condition.

§

ENCLS = 60

An ENCLS leaf intercepted by the ENCLS-exiting bitmap.

§

RDSEED = 61

An intercepted RDSEED instruction.

§

PML_FULL = 62

An attempted page-modification log update with the PML index outside 0..=511.

§

XSAVES = 63

An XSAVES request for state selected by IA32_XSS and the XSS-exiting bitmap.

§

XRSTORS = 64

An XRSTORS request for state selected by IA32_XSS and the XSS-exiting bitmap.

§

PCONFIG = 65

A PCONFIG leaf intercepted by the PCONFIG-exiting bitmap.

§

SPP_EVENT = 66

A miss or misconfiguration while looking up sub-page write permissions.

§

UMWAIT = 67

An intercepted UMWAIT instruction.

§

TPAUSE = 68

An intercepted TPAUSE instruction.

§

LOADIWKEY = 69

An intercepted LOADIWKEY instruction.

Trait Implementations§

Source§

impl Clone for VmxExitReason

Source§

fn clone(&self) -> VmxExitReason

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

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

Performs copy-assignment from source. Read more
Source§

impl Copy for VmxExitReason

Source§

impl Debug for VmxExitReason

Source§

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

Formats the value using the given formatter. Read more
Source§

impl Eq for VmxExitReason

Source§

impl PartialEq for VmxExitReason

Source§

fn eq(&self, other: &VmxExitReason) -> bool

Equality operator ==. Read more
1.0.0 (const: unstable)§

fn ne(&self, other: &Rhs) -> bool

Inequality operator !=. Read more
Source§

impl StructuralPartialEq for VmxExitReason

Source§

impl TryFrom<u32> for VmxExitReason

Source§

type Error = TryFromIntError

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

fn try_from(value: u32) -> Result<Self, Self::Error>

Performs the conversion.

Auto Trait Implementations§

§

impl Freeze for VmxExitReason

§

impl RefUnwindSafe for VmxExitReason

§

impl Send for VmxExitReason

§

impl Sync for VmxExitReason

§

impl Unpin for VmxExitReason

§

impl UnsafeUnpin for VmxExitReason

§

impl UnwindSafe for VmxExitReason

Blanket Implementations§

§

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

§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
§

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

§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
§

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

§

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

Mutably borrows from an owned value. Read more
Source§

impl<ST, DT> CastableFrom<ST, Initialized, Initialized> for DT
where ST: ?Sized, DT: ?Sized,

Source§

impl<ST, DT> CastableFrom<ST, Uninit, Uninit> for DT
where ST: ?Sized, DT: ?Sized,

§

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

§

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> Conv for T

Source§

fn conv<T>(self) -> T
where Self: Into<T>,

Converts self into T using Into<T>. Read more
Source§

impl<T> FmtForward for T

Source§

fn fmt_binary(self) -> FmtBinary<Self>
where Self: Binary,

Causes self to use its Binary implementation when Debug-formatted.
Source§

fn fmt_display(self) -> FmtDisplay<Self>
where Self: Display,

Causes self to use its Display implementation when Debug-formatted.
Source§

fn fmt_lower_exp(self) -> FmtLowerExp<Self>
where Self: LowerExp,

Causes self to use its LowerExp implementation when Debug-formatted.
Source§

fn fmt_lower_hex(self) -> FmtLowerHex<Self>
where Self: LowerHex,

Causes self to use its LowerHex implementation when Debug-formatted.
Source§

fn fmt_octal(self) -> FmtOctal<Self>
where Self: Octal,

Causes self to use its Octal implementation when Debug-formatted.
Source§

fn fmt_pointer(self) -> FmtPointer<Self>
where Self: Pointer,

Causes self to use its Pointer implementation when Debug-formatted.
Source§

fn fmt_upper_exp(self) -> FmtUpperExp<Self>
where Self: UpperExp,

Causes self to use its UpperExp implementation when Debug-formatted.
Source§

fn fmt_upper_hex(self) -> FmtUpperHex<Self>
where Self: UpperHex,

Causes self to use its UpperHex implementation when Debug-formatted.
Source§

fn fmt_list(self) -> FmtList<Self>
where &'a Self: for<'a> IntoIterator,

Formats each item in a sequence. Read more
§

impl<T> From<T> for T

§

fn from(t: T) -> T

Returns the argument unchanged.

§

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

§

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> Pipe for T
where T: ?Sized,

Source§

fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> R
where Self: Sized,

Pipes by value. This is generally the method you want to use. Read more
Source§

fn pipe_ref<'a, R>(&'a self, func: impl FnOnce(&'a Self) -> R) -> R
where R: 'a,

Borrows self and passes that borrow into the pipe function. Read more
Source§

fn pipe_ref_mut<'a, R>(&'a mut self, func: impl FnOnce(&'a mut Self) -> R) -> R
where R: 'a,

Mutably borrows self and passes that borrow into the pipe function. Read more
Source§

fn pipe_borrow<'a, B, R>(&'a self, func: impl FnOnce(&'a B) -> R) -> R
where Self: Borrow<B>, B: 'a + ?Sized, R: 'a,

Borrows self, then passes self.borrow() into the pipe function. Read more
Source§

fn pipe_borrow_mut<'a, B, R>( &'a mut self, func: impl FnOnce(&'a mut B) -> R, ) -> R
where Self: BorrowMut<B>, B: 'a + ?Sized, R: 'a,

Mutably borrows self, then passes self.borrow_mut() into the pipe function. Read more
Source§

fn pipe_as_ref<'a, U, R>(&'a self, func: impl FnOnce(&'a U) -> R) -> R
where Self: AsRef<U>, U: 'a + ?Sized, R: 'a,

Borrows self, then passes self.as_ref() into the pipe function.
Source§

fn pipe_as_mut<'a, U, R>(&'a mut self, func: impl FnOnce(&'a mut U) -> R) -> R
where Self: AsMut<U>, U: 'a + ?Sized, R: 'a,

Mutably borrows self, then passes self.as_mut() into the pipe function.
Source§

fn pipe_deref<'a, T, R>(&'a self, func: impl FnOnce(&'a T) -> R) -> R
where Self: Deref<Target = T>, T: 'a + ?Sized, R: 'a,

Borrows self, then passes self.deref() into the pipe function.
Source§

fn pipe_deref_mut<'a, T, R>( &'a mut self, func: impl FnOnce(&'a mut T) -> R, ) -> R
where Self: DerefMut<Target = T> + Deref, T: 'a + ?Sized, R: 'a,

Mutably borrows self, then passes self.deref_mut() into the pipe function.
Source§

impl<T> Pointee for T

Source§

type Metadata = ()

The metadata type for pointers and references to this type.
Source§

impl<T> Read<Exclusive, BecauseExclusive> for T
where T: ?Sized,

Source§

impl<T> Tap for T

Source§

fn tap(self, func: impl FnOnce(&Self)) -> Self

Immutable access to a value. Read more
Source§

fn tap_mut(self, func: impl FnOnce(&mut Self)) -> Self

Mutable access to a value. Read more
Source§

fn tap_borrow<B>(self, func: impl FnOnce(&B)) -> Self
where Self: Borrow<B>, B: ?Sized,

Immutable access to the Borrow<B> of a value. Read more
Source§

fn tap_borrow_mut<B>(self, func: impl FnOnce(&mut B)) -> Self
where Self: BorrowMut<B>, B: ?Sized,

Mutable access to the BorrowMut<B> of a value. Read more
Source§

fn tap_ref<R>(self, func: impl FnOnce(&R)) -> Self
where Self: AsRef<R>, R: ?Sized,

Immutable access to the AsRef<R> view of a value. Read more
Source§

fn tap_ref_mut<R>(self, func: impl FnOnce(&mut R)) -> Self
where Self: AsMut<R>, R: ?Sized,

Mutable access to the AsMut<R> view of a value. Read more
Source§

fn tap_deref<T>(self, func: impl FnOnce(&T)) -> Self
where Self: Deref<Target = T>, T: ?Sized,

Immutable access to the Deref::Target of a value. Read more
Source§

fn tap_deref_mut<T>(self, func: impl FnOnce(&mut T)) -> Self
where Self: DerefMut<Target = T> + Deref, T: ?Sized,

Mutable access to the Deref::Target of a value. Read more
Source§

fn tap_dbg(self, func: impl FnOnce(&Self)) -> Self

Calls .tap() only in debug builds, and is erased in release builds.
Source§

fn tap_mut_dbg(self, func: impl FnOnce(&mut Self)) -> Self

Calls .tap_mut() only in debug builds, and is erased in release builds.
Source§

fn tap_borrow_dbg<B>(self, func: impl FnOnce(&B)) -> Self
where Self: Borrow<B>, B: ?Sized,

Calls .tap_borrow() only in debug builds, and is erased in release builds.
Source§

fn tap_borrow_mut_dbg<B>(self, func: impl FnOnce(&mut B)) -> Self
where Self: BorrowMut<B>, B: ?Sized,

Calls .tap_borrow_mut() only in debug builds, and is erased in release builds.
Source§

fn tap_ref_dbg<R>(self, func: impl FnOnce(&R)) -> Self
where Self: AsRef<R>, R: ?Sized,

Calls .tap_ref() only in debug builds, and is erased in release builds.
Source§

fn tap_ref_mut_dbg<R>(self, func: impl FnOnce(&mut R)) -> Self
where Self: AsMut<R>, R: ?Sized,

Calls .tap_ref_mut() only in debug builds, and is erased in release builds.
Source§

fn tap_deref_dbg<T>(self, func: impl FnOnce(&T)) -> Self
where Self: Deref<Target = T>, T: ?Sized,

Calls .tap_deref() only in debug builds, and is erased in release builds.
Source§

fn tap_deref_mut_dbg<T>(self, func: impl FnOnce(&mut T)) -> Self
where Self: DerefMut<Target = T> + Deref, T: ?Sized,

Calls .tap_deref_mut() only in debug builds, and is erased in release builds.
§

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

§

type Owned = T

The resulting type after obtaining ownership.
§

fn to_owned(&self) -> T

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

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

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

impl<T> TryConv for T

Source§

fn try_conv<T>(self) -> Result<T, Self::Error>
where Self: TryInto<T>,

Attempts to convert self into T using TryInto<T>. Read more
§

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

§

type Error = Infallible

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

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

Performs the conversion.
§

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

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

Performs the conversion.