Software Archive
Read-only legacy content
17061 Discussions

X2Apic behavior in virtualized and non-virtualized modes

lee__mr
Beginner
607 Views

My question is on the ICR offset of the local apic.

 

X2APIC normal operation:

From table 10.6:

MSR 0x830 - ICR

This msr covers both offsets 0x300(ICR_LO) and 0x310(ICR_HI) in the xapic mode.
Footnote at the bottom of the table seems to indicate any access to MSR
0x831 will cause general-protection violations.

X2APIC in vmx non-root

section 29.5 - virtualizing msr based accesses :

If APIC-register virtualization is 1 and ECX contains a value in the range
800H-8FFH, the instruction reads the 8 bytes from offset X on the virtual-APIC page into EDX:EAX, 
where X = (ECX & FFH) « 4. This occurs even if the local APIC is not in x2APIC mode.

 

1. If I do a rdmsr to msr 0x830 in vmx non-root and if the virtual apic page is at
address X then the result I get is from offset X+0x300 in EAX and X+0x304 from
EDX.

2. If I do a rdmsr to msr 0x830 outside of a virtual machine, the result I get
is memory-mapped offset of 0x300 in EAX and memory-mapped offset of 0x310 in
EDX.

It seems to me that the normal x2apic operation and the operation with apic
register virtualization differ in their results returned for this msr. Am I
interpreting the content of section 29.5 correctly? 

If the documentation is correct then any ideas on how to handle it in software?

Thank you.

 

 

0 Kudos
0 Replies
Reply