background image

Vol. 3C 27-23

VM EXITS

If the VM exit stored 0 for bit 31 for IDT-vectoring information field (because the VM exit did not occur 
during delivery of an event through the IDT; see Section 27.2.3), the value saved is 1.

If the VM exit stored 1 for bit 31 for IDT-vectoring information field (because the VM exit did occur 
during delivery of an event through the IDT), the value saved is the value that would have appeared in 
the saved RFLAGS image had the event been delivered through the IDT (see above).

— For all other VM exits, the value saved is the value RFLAGS.RF had before the VM exit occurred.

27.3.4 

Saving Non-Register State

Information corresponding to guest non-register state is saved as follows:

The activity-state field is saved with the logical processor’s activity state before the VM exit.

1

 See Section 27.1 

for details of how events leading to a VM exit may affect the activity state.

The interruptibility-state field is saved to reflect the logical processor’s interruptibility before the VM exit.
— See Section 27.1 for details of how events leading to a VM exit may affect this state.
— VM exits that end outside system-management mode (SMM) save bit 2 (blocking by SMI) as 0 regardless 

of the state of such blocking before the VM exit.

— Bit 3 (blocking by NMI) is treated specially if the “virtual NMIs” VM-execution control is 1. In this case, the 

value saved for this field does not indicate the blocking of NMIs but rather the state of virtual-NMI blocking.

— Bit 4 (enclave interruption) is set to 1 if the VM exit occurred while the logical processor was in enclave 

mode.
Such VM exits includes those caused by interrupts, non-maskable interrupts, system-management 
interrupts, INIT signals, and exceptions occurring in enclave mode as well as exceptions encountered 
during the delivery of such events incident to enclave mode.
A VM exit that is incident to delivery of an event injected by VM entry leaves this bit unmodified.

The pending debug exceptions field is saved as clear for all VM exits except the following:
— A VM exit caused by an INIT signal, a machine-check exception, or a system-management interrupt (SMI).
— A VM exit with basic exit reason “TPR below threshold”,

2

 “virtualized EOI”, “APIC write”, or “monitor trap 

flag.”

— VM exits that are not caused by debug exceptions and that occur while there is MOV-SS blocking of debug 

exceptions.

For VM exits that do not clear the field, the value saved is determined as follows:
— Each of bits 3:0 may be set if it corresponds to a matched breakpoint. This may be true even if the corre-

sponding breakpoint is not enabled in DR7.

— Suppose that a VM exit is due to an INIT signal, a machine-check exception, or an SMI; or that a VM exit 

has basic exit reason “TPR below threshold” or “monitor trap flag.” In this case, the value saved sets bits 
corresponding to the causes of any debug exceptions that were pending at the time of the VM exit.
If the VM exit occurs immediately after VM entry, the value saved may match that which was loaded on 
VM entry (see Section 26.6.3). Otherwise, the following items apply:

Bit 12 (enabled breakpoint) is set to 1 in any of the following cases:
— If there was at least one matched data or I/O breakpoint that was enabled in DR7.
— If it had been set on VM entry, causing there to be valid pending debug exceptions (see Section 

26.6.3) and the VM exit occurred before those exceptions were either delivered or lost.

— If the XBEGIN instruction was executed immediately before the VM exit and advanced debugging of 

RTM transactional regions had been enabled (see Section 16.3.7, “RTM-Enabled Debugger 

1. If this activity state was an inactive state resulting from execution of a specific instruction (HLT or MWAIT), the value saved for RIP 

by that VM exit will reference the following instruction.

2. This item includes VM exits that occur as a result of certain VM entries (Section 26.6.7).