#[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
impl Clone for VmxExitReason
Source§fn clone(&self) -> VmxExitReason
fn clone(&self) -> VmxExitReason
1.0.0 (const: unstable)§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source. Read moreimpl Copy for VmxExitReason
Source§impl Debug for VmxExitReason
impl Debug for VmxExitReason
impl Eq for VmxExitReason
Source§impl PartialEq for VmxExitReason
impl PartialEq for VmxExitReason
impl StructuralPartialEq for VmxExitReason
Source§impl TryFrom<u32> for VmxExitReason
impl TryFrom<u32> for VmxExitReason
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 Twhere
T: 'static + ?Sized,
impl<T> Any for Twhere
T: 'static + ?Sized,
§impl<T> Borrow<T> for Twhere
T: ?Sized,
impl<T> Borrow<T> for Twhere
T: ?Sized,
§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
impl<ST, DT> CastableFrom<ST, Initialized, Initialized> for DTwhere
ST: ?Sized,
DT: ?Sized,
impl<ST, DT> CastableFrom<ST, Uninit, Uninit> for DTwhere
ST: ?Sized,
DT: ?Sized,
§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
§unsafe fn clone_to_uninit(&self, dest: *mut u8)
unsafe fn clone_to_uninit(&self, dest: *mut u8)
clone_to_uninit)Source§impl<T> FmtForward for T
impl<T> FmtForward for T
Source§fn fmt_binary(self) -> FmtBinary<Self>where
Self: Binary,
fn fmt_binary(self) -> FmtBinary<Self>where
Self: Binary,
self to use its Binary implementation when Debug-formatted.Source§fn fmt_display(self) -> FmtDisplay<Self>where
Self: Display,
fn fmt_display(self) -> FmtDisplay<Self>where
Self: Display,
self to use its Display implementation when
Debug-formatted.Source§fn fmt_lower_exp(self) -> FmtLowerExp<Self>where
Self: LowerExp,
fn fmt_lower_exp(self) -> FmtLowerExp<Self>where
Self: LowerExp,
self to use its LowerExp implementation when
Debug-formatted.Source§fn fmt_lower_hex(self) -> FmtLowerHex<Self>where
Self: LowerHex,
fn fmt_lower_hex(self) -> FmtLowerHex<Self>where
Self: LowerHex,
self to use its LowerHex implementation when
Debug-formatted.Source§fn fmt_octal(self) -> FmtOctal<Self>where
Self: Octal,
fn fmt_octal(self) -> FmtOctal<Self>where
Self: Octal,
self to use its Octal implementation when Debug-formatted.Source§fn fmt_pointer(self) -> FmtPointer<Self>where
Self: Pointer,
fn fmt_pointer(self) -> FmtPointer<Self>where
Self: Pointer,
self to use its Pointer implementation when
Debug-formatted.Source§fn fmt_upper_exp(self) -> FmtUpperExp<Self>where
Self: UpperExp,
fn fmt_upper_exp(self) -> FmtUpperExp<Self>where
Self: UpperExp,
self to use its UpperExp implementation when
Debug-formatted.Source§fn fmt_upper_hex(self) -> FmtUpperHex<Self>where
Self: UpperHex,
fn fmt_upper_hex(self) -> FmtUpperHex<Self>where
Self: UpperHex,
self to use its UpperHex implementation when
Debug-formatted.§impl<T, U> Into<U> for Twhere
U: From<T>,
impl<T, U> Into<U> for Twhere
U: From<T>,
Source§impl<T> Pipe for Twhere
T: ?Sized,
impl<T> Pipe for Twhere
T: ?Sized,
Source§fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> Rwhere
Self: Sized,
fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> Rwhere
Self: Sized,
Source§fn pipe_ref<'a, R>(&'a self, func: impl FnOnce(&'a Self) -> R) -> Rwhere
R: 'a,
fn pipe_ref<'a, R>(&'a self, func: impl FnOnce(&'a Self) -> R) -> Rwhere
R: 'a,
self and passes that borrow into the pipe function. Read moreSource§fn pipe_ref_mut<'a, R>(&'a mut self, func: impl FnOnce(&'a mut Self) -> R) -> Rwhere
R: 'a,
fn pipe_ref_mut<'a, R>(&'a mut self, func: impl FnOnce(&'a mut Self) -> R) -> Rwhere
R: 'a,
self and passes that borrow into the pipe function. Read moreSource§fn pipe_borrow<'a, B, R>(&'a self, func: impl FnOnce(&'a B) -> R) -> Rwhere
Self: Borrow<B>,
B: 'a + ?Sized,
R: 'a,
fn pipe_borrow<'a, B, R>(&'a self, func: impl FnOnce(&'a B) -> R) -> Rwhere
Self: Borrow<B>,
B: 'a + ?Sized,
R: 'a,
Source§fn pipe_borrow_mut<'a, B, R>(
&'a mut self,
func: impl FnOnce(&'a mut B) -> R,
) -> Rwhere
Self: BorrowMut<B>,
B: 'a + ?Sized,
R: 'a,
fn pipe_borrow_mut<'a, B, R>(
&'a mut self,
func: impl FnOnce(&'a mut B) -> R,
) -> Rwhere
Self: BorrowMut<B>,
B: 'a + ?Sized,
R: 'a,
Source§fn pipe_as_ref<'a, U, R>(&'a self, func: impl FnOnce(&'a U) -> R) -> Rwhere
Self: AsRef<U>,
U: 'a + ?Sized,
R: 'a,
fn pipe_as_ref<'a, U, R>(&'a self, func: impl FnOnce(&'a U) -> R) -> Rwhere
Self: AsRef<U>,
U: 'a + ?Sized,
R: 'a,
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) -> Rwhere
Self: AsMut<U>,
U: 'a + ?Sized,
R: 'a,
fn pipe_as_mut<'a, U, R>(&'a mut self, func: impl FnOnce(&'a mut U) -> R) -> Rwhere
Self: AsMut<U>,
U: 'a + ?Sized,
R: 'a,
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) -> Rwhere
Self: Deref<Target = T>,
T: 'a + ?Sized,
R: 'a,
fn pipe_deref<'a, T, R>(&'a self, func: impl FnOnce(&'a T) -> R) -> Rwhere
Self: Deref<Target = T>,
T: 'a + ?Sized,
R: 'a,
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,
) -> Rwhere
Self: DerefMut<Target = T> + Deref,
T: 'a + ?Sized,
R: 'a,
fn pipe_deref_mut<'a, T, R>(
&'a mut self,
func: impl FnOnce(&'a mut T) -> R,
) -> Rwhere
Self: DerefMut<Target = T> + Deref,
T: 'a + ?Sized,
R: 'a,
self, then passes self.deref_mut() into the pipe
function.impl<T> Read<Exclusive, BecauseExclusive> for Twhere
T: ?Sized,
Source§impl<T> Tap for T
impl<T> Tap for T
Source§fn tap_borrow<B>(self, func: impl FnOnce(&B)) -> Selfwhere
Self: Borrow<B>,
B: ?Sized,
fn tap_borrow<B>(self, func: impl FnOnce(&B)) -> Selfwhere
Self: Borrow<B>,
B: ?Sized,
Borrow<B> of a value. Read moreSource§fn tap_borrow_mut<B>(self, func: impl FnOnce(&mut B)) -> Selfwhere
Self: BorrowMut<B>,
B: ?Sized,
fn tap_borrow_mut<B>(self, func: impl FnOnce(&mut B)) -> Selfwhere
Self: BorrowMut<B>,
B: ?Sized,
BorrowMut<B> of a value. Read moreSource§fn tap_ref<R>(self, func: impl FnOnce(&R)) -> Selfwhere
Self: AsRef<R>,
R: ?Sized,
fn tap_ref<R>(self, func: impl FnOnce(&R)) -> Selfwhere
Self: AsRef<R>,
R: ?Sized,
AsRef<R> view of a value. Read moreSource§fn tap_ref_mut<R>(self, func: impl FnOnce(&mut R)) -> Selfwhere
Self: AsMut<R>,
R: ?Sized,
fn tap_ref_mut<R>(self, func: impl FnOnce(&mut R)) -> Selfwhere
Self: AsMut<R>,
R: ?Sized,
AsMut<R> view of a value. Read moreSource§fn tap_deref<T>(self, func: impl FnOnce(&T)) -> Selfwhere
Self: Deref<Target = T>,
T: ?Sized,
fn tap_deref<T>(self, func: impl FnOnce(&T)) -> Selfwhere
Self: Deref<Target = T>,
T: ?Sized,
Deref::Target of a value. Read moreSource§fn tap_deref_mut<T>(self, func: impl FnOnce(&mut T)) -> Selfwhere
Self: DerefMut<Target = T> + Deref,
T: ?Sized,
fn tap_deref_mut<T>(self, func: impl FnOnce(&mut T)) -> Selfwhere
Self: DerefMut<Target = T> + Deref,
T: ?Sized,
Deref::Target of a value. Read moreSource§fn tap_dbg(self, func: impl FnOnce(&Self)) -> Self
fn tap_dbg(self, func: impl FnOnce(&Self)) -> Self
.tap() only in debug builds, and is erased in release builds.Source§fn tap_mut_dbg(self, func: impl FnOnce(&mut Self)) -> Self
fn tap_mut_dbg(self, func: impl FnOnce(&mut Self)) -> Self
.tap_mut() only in debug builds, and is erased in release
builds.Source§fn tap_borrow_dbg<B>(self, func: impl FnOnce(&B)) -> Selfwhere
Self: Borrow<B>,
B: ?Sized,
fn tap_borrow_dbg<B>(self, func: impl FnOnce(&B)) -> Selfwhere
Self: Borrow<B>,
B: ?Sized,
.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)) -> Selfwhere
Self: BorrowMut<B>,
B: ?Sized,
fn tap_borrow_mut_dbg<B>(self, func: impl FnOnce(&mut B)) -> Selfwhere
Self: BorrowMut<B>,
B: ?Sized,
.tap_borrow_mut() only in debug builds, and is erased in release
builds.Source§fn tap_ref_dbg<R>(self, func: impl FnOnce(&R)) -> Selfwhere
Self: AsRef<R>,
R: ?Sized,
fn tap_ref_dbg<R>(self, func: impl FnOnce(&R)) -> Selfwhere
Self: AsRef<R>,
R: ?Sized,
.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)) -> Selfwhere
Self: AsMut<R>,
R: ?Sized,
fn tap_ref_mut_dbg<R>(self, func: impl FnOnce(&mut R)) -> Selfwhere
Self: AsMut<R>,
R: ?Sized,
.tap_ref_mut() only in debug builds, and is erased in release
builds.Source§fn tap_deref_dbg<T>(self, func: impl FnOnce(&T)) -> Selfwhere
Self: Deref<Target = T>,
T: ?Sized,
fn tap_deref_dbg<T>(self, func: impl FnOnce(&T)) -> Selfwhere
Self: Deref<Target = T>,
T: ?Sized,
.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)) -> Selfwhere
Self: DerefMut<Target = T> + Deref,
T: ?Sized,
fn tap_deref_mut_dbg<T>(self, func: impl FnOnce(&mut T)) -> Selfwhere
Self: DerefMut<Target = T> + Deref,
T: ?Sized,
.tap_deref_mut() only in debug builds, and is erased in release
builds.