Intel 64 and IA-32 Architectures Software Developers Manual Volume 3B, System Programming Guide Part 2

Table Of Contents
Vol. 3 26-13
VIRTUAL-MACHINE MONITOR PROGRAMMING CONSIDERATIONS
A VMM can reflect a double-fault exception to guest software by setting the
VM-entry interruption-information and VM-entry exception error-code fields
as follows:
Set bits 7:0 (vector) of the VM-entry interruption-information field to 8
(#DF).
Set bits 10:8 (interruption type) of the VM-entry interruption-information
field to 3 (hardware exception).
Set bit 11 (deliver error code) of the VM-entry interruption-information
field to 1.
Clear bits 30:12 (reserved) of VM-entry interruption-information field.
Set bit 31 (valid) of VM-entry interruption-information field.
Set the VM-entry exception error-code field to zero.
If the value of bits 10:8 of the IDT-vectoring information field is 3 (hardware
exception) and the value of bits 7:0 is 8 (#DF), guest software would have
encountered a triple fault. Event injection should not be used in this case. The
VMM may choose to terminate the guest, or it might choose to enter the
guest in the shutdown activity state.
26.7.1.2 Resuming Guest Software after Handling an Exception
If the VMM determines that a VM exit was caused by an exception due to a condition
established by the VMM itself, it may choose to resume guest software after
removing the condition. The approach for removing the condition may be specific to
the VMM’s software architecture. and algorithms This section describes how guest
software may be resumed after removing the condition.
In general, the VMM can resume guest software simply by executing VMRESUME. The
following items provide details of cases that may require special handling:
If the “NMI exiting” VM-execution control is 0, bit 12 of the VM-exit interruption-
information field indicates that the VM exit was due to a fault encountered during
an execution of the IRET instruction that unblocked non-maskable interrupts
(NMIs). In particular, it provides this indication if the following are both true:
Bit 31 (valid) in the IDT-vectoring information field is 0.
The value of bits 7:0 (vector) of the VM-exit interruption-information field is
not 8 (the VM exit is not due to a double-fault exception).
If both are true and bit 12 of the VM-exit interruption-information field is 1, NMIs
were blocked before guest software executed the IRET instruction that caused
the fault that caused the VM exit. The VMM should set bit 3 (blocking by NMI) in
the interruptibility-state field (using VMREAD and VMWRITE) before resuming
guest software.
If the “virtual NMIs” VM-execution control is 1, bit 12 of the VM-exit interruption-
information field indicates that the VM exit was due to a fault encountered during