Vol. 3C 29-13
APIC VIRTUALIZATION AND VIRTUAL INTERRUPTS
•
If the value is non-zero, the logical processor performs self-IPI virtualization with the 8-bit vector in
EAX[7:0] (see Section 29.1.5).
•
If the value is zero, the logical processor causes an APIC-write VM exit as if there had been a write
access to page offset 3F0H on the APIC-access page (see Section 29.4.3.3).
If special processing does not apply, the instruction operates normally. If the local APIC is in x2APIC mode
and ECX indicates a writable APIC register, the value in EDX:EAX is written to that register. If the local APIC is
not in x2APIC mode or ECX does not indicate a writable APIC register, a general-protection fault occurs.
29.6 POSTED-INTERRUPT
PROCESSING
Posted-interrupt processing is a feature by which a processor processes the virtual interrupts by recording them as
pending on the virtual-APIC page.
Posted-interrupt processing is enabled by setting the “process posted interrupts” VM-execution control. The
processing is performed in response to the arrival of an interrupt with the posted-interrupt notification vector.
In response to such an interrupt, the processor processes virtual interrupts recorded in a data structure called a
posted-interrupt descriptor. The posted-interrupt notification vector and the address of the posted-interrupt
descriptor are fields in the VMCS; see Section 24.6.8.
If the “process posted interrupts” VM-execution control is 1, a logical processor uses a 64-byte posted-interrupt
descriptor located at the posted-interrupt descriptor address. The posted-interrupt descriptor has the following
format:
The notation PIR (posted-interrupt requests) refers to the 256 posted-interrupt bits in the posted-interrupt
descriptor.
Use of the posted-interrupt descriptor differs from that of other data structures that are referenced by pointers in
a VMCS. There is a general requirement that software ensure that each such data structure is modified only when
no logical processor with a current VMCS that references it is in VMX non-root operation. That requirement does
not apply to the posted-interrupt descriptor. There is a requirement, however, that such modifications be done
using locked read-modify-write instructions.
If the “external-interrupt exiting” VM-execution control is 1, any unmasked external interrupt causes a VM exit
(see Section 25.2). If the “process posted interrupts” VM-execution control is also 1, this behavior is changed and
the processor handles an external interrupt as follows:
14
1. The local APIC is acknowledged; this provides the processor core with an interrupt vector, called here the
physical vector.
2. If the physical vector equals the posted-interrupt notification vector, the logical processor continues to the next
step. Otherwise, a VM exit occurs as it would normally due to an external interrupt; the vector is saved in the
VM-exit interruption-information field.
3. The processor clears the outstanding-notification bit in the posted-interrupt descriptor. This is done atomically
so as to leave the remainder of the descriptor unmodified (e.g., with a locked AND operation).
Table 29-1. Format of Posted-Interrupt Descriptor
Bit
Position(s)
Name
Description
255:0
Posted-interrupt requests
One bit for each interrupt vector. There is a posted-interrupt request for a vector if
the corresponding bit is 1
256
Outstanding notification
If this bit is set, there is a notification outstanding for one or more posted interrupts
in bits 255:0
511:257
Reserved for software and
other agents
These bits may be used by software and by other agents in the system (e.g.,
chipset). The processor does not modify these bits.
14. VM entry ensures that the “process posted interrupts” VM-execution control is 1 only if the “external-interrupt exiting” VM-execu-
tion control is also 1. SeeSection 26.2.1.1.