A model specific register (msr) is an 64-bit register.
It can be read with the RDMSR instruction and the
register value is returned via two registers EDX:EAX.
EDX holds the 32 higher bits and EAX holds the 32 lower
bits.

In the x86_features.xml file, some vmx-* features are
wrongly defined as bits in the EAX register. For example,
for the MSR 0x48B, the feature vmx-apicv-xapic is currently
specified as the first bit of the EAX register but in the
Intel specification [1], this feature is represented by the
first bit of the EDX register (higher 32 bits).

This is the list of affected msrs that need to be fixed:

0x48B : IA32_VMX_PROCBASED_CTLS2
0x48D : IA32_VMX_TRUE_PINBASED_CTLS
0x48E : IA32_VMX_TRUE_PROCBASED_CTLS
0x48F : IA32_VMX_TRUE_EXIT_CTLS
0x490 : IA32_VMX_TRUE_ENTRY_CTLS

[1] Appendix A.3
    IntelĀ® 64 and IA-32 Architectures Software Developers Manual
    Volume 3 (3A, 3B, 3C & 3D): System Programming Guide

Signed-off-by: Hector Cao <hector....@canonical.com>
---
 src/cpu_map/x86_features.xml | 136 +++++++++++++++++------------------
 1 file changed, 68 insertions(+), 68 deletions(-)

diff --git a/src/cpu_map/x86_features.xml b/src/cpu_map/x86_features.xml
index d06d60e230..0f60adb388 100644
--- a/src/cpu_map/x86_features.xml
+++ b/src/cpu_map/x86_features.xml
@@ -922,67 +922,67 @@
 
   <!-- msr 0x0000048b -->
   <feature name='vmx-apicv-xapic'>
-    <msr index='0x0000048b' edx='0x00000000' eax='0x00000001'/>
+    <msr index='0x0000048b' edx='0x00000001' eax='0x00000000'/>
   </feature>
   <feature name='vmx-ept'>
-    <msr index='0x0000048b' edx='0x00000000' eax='0x00000002'/>
+    <msr index='0x0000048b' edx='0x00000002' eax='0x00000000'/>
   </feature>
   <feature name='vmx-desc-exit'>
-    <msr index='0x0000048b' edx='0x00000000' eax='0x00000004'/>
+    <msr index='0x0000048b' edx='0x00000004 ' eax='0x00000000'/>
   </feature>
   <feature name='vmx-rdtscp-exit'>
-    <msr index='0x0000048b' edx='0x00000000' eax='0x00000008'/>
+    <msr index='0x0000048b' edx='0x00000008 ' eax='0x00000000'/>
   </feature>
   <feature name='vmx-apicv-x2apic'>
-    <msr index='0x0000048b' edx='0x00000000' eax='0x00000010'/>
+    <msr index='0x0000048b' edx='0x00000010 ' eax='0x00000000'/>
   </feature>
   <feature name='vmx-vpid'>
-    <msr index='0x0000048b' edx='0x00000000' eax='0x00000020'/>
+    <msr index='0x0000048b' edx='0x00000020 ' eax='0x00000000'/>
   </feature>
   <feature name='vmx-wbinvd-exit'>
-    <msr index='0x0000048b' edx='0x00000000' eax='0x00000040'/>
+    <msr index='0x0000048b' edx='0x00000040 ' eax='0x00000000'/>
   </feature>
   <feature name='vmx-unrestricted-guest'>
-    <msr index='0x0000048b' edx='0x00000000' eax='0x00000080'/>
+    <msr index='0x0000048b' edx='0x00000080 ' eax='0x00000000'/>
   </feature>
   <feature name='vmx-apicv-register'>
-    <msr index='0x0000048b' edx='0x00000000' eax='0x00000100'/>
+    <msr index='0x0000048b' edx='0x00000100 ' eax='0x00000000'/>
   </feature>
   <feature name='vmx-apicv-vid'>
-    <msr index='0x0000048b' edx='0x00000000' eax='0x00000200'/>
+    <msr index='0x0000048b' edx='0x00000200 ' eax='0x00000000'/>
   </feature>
   <feature name='vmx-ple'>
-    <msr index='0x0000048b' edx='0x00000000' eax='0x00000400'/>
+    <msr index='0x0000048b' edx='0x00000400 ' eax='0x00000000'/>
   </feature>
   <feature name='vmx-rdrand-exit'>
-    <msr index='0x0000048b' edx='0x00000000' eax='0x00000800'/>
+    <msr index='0x0000048b' edx='0x00000800 ' eax='0x00000000'/>
   </feature>
   <feature name='vmx-invpcid-exit'>
-    <msr index='0x0000048b' edx='0x00000000' eax='0x00001000'/>
+    <msr index='0x0000048b' edx='0x00001000 ' eax='0x00000000'/>
   </feature>
   <feature name='vmx-vmfunc'>
-    <msr index='0x0000048b' edx='0x00000000' eax='0x00002000'/>
+    <msr index='0x0000048b' edx='0x00002000 ' eax='0x00000000'/>
   </feature>
   <feature name='vmx-shadow-vmcs'>
-    <msr index='0x0000048b' edx='0x00000000' eax='0x00004000'/>
+    <msr index='0x0000048b' edx='0x00004000 ' eax='0x00000000'/>
   </feature>
   <feature name='vmx-encls-exit'>
-    <msr index='0x0000048b' edx='0x00000000' eax='0x00008000'/>
+    <msr index='0x0000048b' edx='0x00008000 ' eax='0x00000000'/>
   </feature>
   <feature name='vmx-rdseed-exit'>
-    <msr index='0x0000048b' edx='0x00000000' eax='0x00010000'/>
+    <msr index='0x0000048b' edx='0x00010000 ' eax='0x00000000'/>
   </feature>
   <feature name='vmx-pml'>
-    <msr index='0x0000048b' edx='0x00000000' eax='0x00020000'/>
+    <msr index='0x0000048b' edx='0x00020000 ' eax='0x00000000'/>
   </feature>
   <feature name='vmx-xsaves'>
-    <msr index='0x0000048b' edx='0x00000000' eax='0x00100000'/>
+    <msr index='0x0000048b' edx='0x00100000 ' eax='0x00000000'/>
   </feature>
   <feature name='vmx-tsc-scaling'>
-    <msr index='0x0000048b' edx='0x00000000' eax='0x02000000'/>
+    <msr index='0x0000048b' edx='0x02000000 ' eax='0x00000000'/>
   </feature>
   <feature name='vmx-enable-user-wait-pause'>
-    <msr index='0x0000048b' edx='0x00000000' eax='0x04000000'/>
+    <msr index='0x0000048b' edx='0x04000000 ' eax='0x00000000'/>
   </feature>
 
   <!-- msr 0x0000048c -->
@@ -1041,151 +1041,151 @@
 
   <!-- msr 0x0000048d -->
   <feature name='vmx-intr-exit'>
-    <msr index='0x0000048d' edx='0x00000000' eax='0x00000001'/>
+    <msr index='0x0000048d' edx='0x00000001 ' eax='0x00000000'/>
   </feature>
   <feature name='vmx-nmi-exit'>
-    <msr index='0x0000048d' edx='0x00000000' eax='0x00000008'/>
+    <msr index='0x0000048d' edx='0x00000008 ' eax='0x00000000'/>
   </feature>
   <feature name='vmx-vnmi'>
-    <msr index='0x0000048d' edx='0x00000000' eax='0x00000020'/>
+    <msr index='0x0000048d' edx='0x00000020 ' eax='0x00000000'/>
   </feature>
   <feature name='vmx-preemption-timer'>
-    <msr index='0x0000048d' edx='0x00000000' eax='0x00000040'/>
+    <msr index='0x0000048d' edx='0x00000040 ' eax='0x00000000'/>
   </feature>
   <feature name='vmx-posted-intr'>
-    <msr index='0x0000048d' edx='0x00000000' eax='0x00000080'/>
+    <msr index='0x0000048d' edx='0x00000080 ' eax='0x00000000'/>
   </feature>
 
   <!-- msr 0x0000048e -->
   <feature name='vmx-vintr-pending'>
-    <msr index='0x0000048e' edx='0x00000000' eax='0x00000004'/>
+    <msr index='0x0000048e' edx='0x00000004 ' eax='0x00000000'/>
   </feature>
   <feature name='vmx-tsc-offset'>
-    <msr index='0x0000048e' edx='0x00000000' eax='0x00000008'/>
+    <msr index='0x0000048e' edx='0x00000008 ' eax='0x00000000'/>
   </feature>
   <feature name='vmx-hlt-exit'>
-    <msr index='0x0000048e' edx='0x00000000' eax='0x00000080'/>
+    <msr index='0x0000048e' edx='0x00000080 ' eax='0x00000000'/>
   </feature>
   <feature name='vmx-invlpg-exit'>
-    <msr index='0x0000048e' edx='0x00000000' eax='0x00000200'/>
+    <msr index='0x0000048e' edx='0x00000200 ' eax='0x00000000'/>
   </feature>
   <feature name='vmx-mwait-exit'>
-    <msr index='0x0000048e' edx='0x00000000' eax='0x00000400'/>
+    <msr index='0x0000048e' edx='0x00000400 ' eax='0x00000000'/>
   </feature>
   <feature name='vmx-rdpmc-exit'>
-    <msr index='0x0000048e' edx='0x00000000' eax='0x00000800'/>
+    <msr index='0x0000048e' edx='0x00000800 ' eax='0x00000000'/>
   </feature>
   <feature name='vmx-rdtsc-exit'>
-    <msr index='0x0000048e' edx='0x00000000' eax='0x00001000'/>
+    <msr index='0x0000048e' edx='0x00001000 ' eax='0x00000000'/>
   </feature>
   <feature name='vmx-cr3-load-noexit'>
-    <msr index='0x0000048e' edx='0x00000000' eax='0x00008000'/>
+    <msr index='0x0000048e' edx='0x00008000 ' eax='0x00000000'/>
   </feature>
   <feature name='vmx-cr3-store-noexit'>
-    <msr index='0x0000048e' edx='0x00000000' eax='0x00010000'/>
+    <msr index='0x0000048e' edx='0x00010000 ' eax='0x00000000'/>
   </feature>
   <feature name='vmx-cr8-load-exit'>
-    <msr index='0x0000048e' edx='0x00000000' eax='0x00080000'/>
+    <msr index='0x0000048e' edx='0x00080000 ' eax='0x00000000'/>
   </feature>
   <feature name='vmx-cr8-store-exit'>
-    <msr index='0x0000048e' edx='0x00000000' eax='0x00100000'/>
+    <msr index='0x0000048e' edx='0x00100000 ' eax='0x00000000'/>
   </feature>
   <feature name='vmx-flexpriority'>
-    <msr index='0x0000048e' edx='0x00000000' eax='0x00200000'/>
+    <msr index='0x0000048e' edx='0x00200000 ' eax='0x00000000'/>
   </feature>
   <feature name='vmx-vnmi-pending'>
-    <msr index='0x0000048e' edx='0x00000000' eax='0x00400000'/>
+    <msr index='0x0000048e' edx='0x00400000 ' eax='0x00000000'/>
   </feature>
   <feature name='vmx-movdr-exit'>
-    <msr index='0x0000048e' edx='0x00000000' eax='0x00800000'/>
+    <msr index='0x0000048e' edx='0x00800000 ' eax='0x00000000'/>
   </feature>
   <feature name='vmx-io-exit'>
-    <msr index='0x0000048e' edx='0x00000000' eax='0x01000000'/>
+    <msr index='0x0000048e' edx='0x01000000 ' eax='0x00000000'/>
   </feature>
   <feature name='vmx-io-bitmap'>
-    <msr index='0x0000048e' edx='0x00000000' eax='0x02000000'/>
+    <msr index='0x0000048e' edx='0x02000000 ' eax='0x00000000'/>
   </feature>
   <feature name='vmx-mtf'>
-    <msr index='0x0000048e' edx='0x00000000' eax='0x08000000'/>
+    <msr index='0x0000048e' edx='0x08000000 ' eax='0x00000000'/>
   </feature>
   <feature name='vmx-msr-bitmap'>
-    <msr index='0x0000048e' edx='0x00000000' eax='0x10000000'/>
+    <msr index='0x0000048e' edx='0x10000000 ' eax='0x00000000'/>
   </feature>
   <feature name='vmx-monitor-exit'>
-    <msr index='0x0000048e' edx='0x00000000' eax='0x20000000'/>
+    <msr index='0x0000048e' edx='0x20000000 ' eax='0x00000000'/>
   </feature>
   <feature name='vmx-pause-exit'>
-    <msr index='0x0000048e' edx='0x00000000' eax='0x40000000'/>
+    <msr index='0x0000048e' edx='0x40000000 ' eax='0x00000000'/>
   </feature>
   <feature name='vmx-secondary-ctls'>
-    <msr index='0x0000048e' edx='0x00000000' eax='0x80000000'/>
+    <msr index='0x0000048e' edx='0x80000000 ' eax='0x00000000'/>
   </feature>
 
   <!-- msr 0x0000048f -->
   <feature name='vmx-exit-nosave-debugctl'>
-    <msr index='0x0000048f' edx='0x00000000' eax='0x00000004'/>
+    <msr index='0x0000048f' edx='0x00000004 ' eax='0x00000000'/>
   </feature>
   <feature name='vmx-exit-load-perf-global-ctrl'>
-    <msr index='0x0000048f' edx='0x00000000' eax='0x00001000'/>
+    <msr index='0x0000048f' edx='0x00001000 ' eax='0x00000000'/>
   </feature>
   <feature name='vmx-exit-ack-intr'>
-    <msr index='0x0000048f' edx='0x00000000' eax='0x00008000'/>
+    <msr index='0x0000048f' edx='0x00008000 ' eax='0x00000000'/>
   </feature>
   <feature name='vmx-exit-save-pat'>
-    <msr index='0x0000048f' edx='0x00000000' eax='0x00040000'/>
+    <msr index='0x0000048f' edx='0x00040000 ' eax='0x00000000'/>
   </feature>
   <feature name='vmx-exit-load-pat'>
-    <msr index='0x0000048f' edx='0x00000000' eax='0x00080000'/>
+    <msr index='0x0000048f' edx='0x00080000 ' eax='0x00000000'/>
   </feature>
   <feature name='vmx-exit-save-efer'>
-    <msr index='0x0000048f' edx='0x00000000' eax='0x00100000'/>
+    <msr index='0x0000048f' edx='0x00100000 ' eax='0x00000000'/>
   </feature>
   <feature name='vmx-exit-load-efer'>
-    <msr index='0x0000048f' edx='0x00000000' eax='0x00200000'/>
+    <msr index='0x0000048f' edx='0x00200000 ' eax='0x00000000'/>
   </feature>
   <feature name='vmx-exit-save-preemption-timer'>
-    <msr index='0x0000048f' edx='0x00000000' eax='0x00400000'/>
+    <msr index='0x0000048f' edx='0x00400000 ' eax='0x00000000'/>
   </feature>
   <feature name='vmx-exit-clear-bndcfgs'>
-    <msr index='0x0000048f' edx='0x00000000' eax='0x00800000'/>
+    <msr index='0x0000048f' edx='0x00800000 ' eax='0x00000000'/>
   </feature>
   <feature name='vmx-exit-clear-rtit-ctl'>
-    <msr index='0x0000048f' edx='0x00000000' eax='0x02000000'/>
+    <msr index='0x0000048f' edx='0x02000000 ' eax='0x00000000'/>
   </feature>
   <feature name='vmx-exit-load-pkrs'>
-    <msr index='0x0000048f' edx='0x00000000' eax='0x20000000'/>
+    <msr index='0x0000048f' edx='0x20000000 ' eax='0x00000000'/>
   </feature>
   <feature name='vmx-exit-secondary-ctls'>
-    <msr index='0x0000048f' edx='0x00000000' eax='0x80000000'/>
+    <msr index='0x0000048f' edx='0x80000000 ' eax='0x00000000'/>
   </feature>
 
   <!-- msr 0x00000490 -->
   <feature name='vmx-entry-noload-debugctl'>
-    <msr index='0x00000490' edx='0x00000000' eax='0x00000004'/>
+    <msr index='0x00000490' edx='0x00000004 ' eax='0x00000000'/>
   </feature>
   <feature name='vmx-entry-ia32e-mode'>
-    <msr index='0x00000490' edx='0x00000000' eax='0x00000200'/>
+    <msr index='0x00000490' edx='0x00000200 ' eax='0x00000000'/>
   </feature>
   <feature name='vmx-entry-load-perf-global-ctrl'>
-    <msr index='0x00000490' edx='0x00000000' eax='0x00002000'/>
+    <msr index='0x00000490' edx='0x00002000 ' eax='0x00000000'/>
   </feature>
   <feature name='vmx-entry-load-pat'>
-    <msr index='0x00000490' edx='0x00000000' eax='0x00004000'/>
+    <msr index='0x00000490' edx='0x00004000 ' eax='0x00000000'/>
   </feature>
   <feature name='vmx-entry-load-efer'>
-    <msr index='0x00000490' edx='0x00000000' eax='0x00008000'/>
+    <msr index='0x00000490' edx='0x00008000 ' eax='0x00000000'/>
   </feature>
   <feature name='vmx-entry-load-bndcfgs'>
-    <msr index='0x00000490' edx='0x00000000' eax='0x00010000'/>
+    <msr index='0x00000490' edx='0x00010000 ' eax='0x00000000'/>
   </feature>
   <feature name='vmx-entry-load-rtit-ctl'>
-    <msr index='0x00000490' edx='0x00000000' eax='0x00040000'/>
+    <msr index='0x00000490' edx='0x00040000 ' eax='0x00000000'/>
   </feature>
   <feature name='vmx-entry-load-pkrs'>
-    <msr index='0x00000490' edx='0x00000000' eax='0x00400000'/>
+    <msr index='0x00000490' edx='0x00400000 ' eax='0x00000000'/>
   </feature>
   <feature name='vmx-entry-load-fred'>
-    <msr index='0x00000490' edx='0x00000000' eax='0x00800000'/>
+    <msr index='0x00000490' edx='0x00800000 ' eax='0x00000000'/>
   </feature>
 
   <!-- msr 0x00000491 -->
-- 
2.45.2

Reply via email to