]> xenbits.xensource.com Git - xen.git/commitdiff
svm: Fake out the Bus Unit Config MSR on revF AMD CPUs
authorGeorge Dunlap <george.dunlap@eu.citrix.com>
Thu, 8 Mar 2012 09:17:21 +0000 (09:17 +0000)
committerGeorge Dunlap <george.dunlap@eu.citrix.com>
Thu, 8 Mar 2012 09:17:21 +0000 (09:17 +0000)
Win2k8 x64 reads this MSR on revF chips, where it wasn't publically
available; it uses a magic constant in %rdi as a password, which we
don't have in rdmsr_safe().  Since we'll ignore the later writes, just
use a plausible value here (the reset value from rev10h chips) if the
real CPU didn't provide one.

Signed-off-by: George Dunlap <george.dunlap@eu.citrix.com>
Committed-by: Keir Fraser <keir@xen.org>
xen/arch/x86/hvm/svm/svm.c
xen/include/asm-x86/msr-index.h

index d89b3a2d6d2fca07471b3780550b8ba4b2796829..17b4a152aa3522f6591d60f71e9a13a4e56fa69b 100644 (file)
@@ -1505,6 +1505,18 @@ static int svm_msr_read_intercept(unsigned int msr, uint64_t *msr_content)
         if ( rdmsr_safe(msr, *msr_content) == 0 )
             break;
 
+        if ( msr == MSR_F10_BU_CFG )
+        {
+            /* Win2k8 x64 reads this MSR on revF chips, where it
+             * wasn't publically available; it uses a magic constant
+             * in %rdi as a password, which we don't have in
+             * rdmsr_safe().  Since we'll ignore the later writes,
+             * just use a plausible value here (the reset value from
+             * rev10h chips) if the real CPU didn't provide one. */
+            *msr_content = 0x0000000010200020ull;
+            break;
+        }
+
         goto gpf;
     }
 
index 4c773741e827bac1ee9d2544d6e2b025cc26501d..7d988258ec2c6334fa4bb12586503063b691c1a6 100644 (file)
 #define MSR_F10_MC4_MISC2              0xc0000409
 #define MSR_F10_MC4_MISC3              0xc000040A
 
+/* AMD Family10h MMU control MSRs */
+#define MSR_F10_BU_CFG                  0xc0011023
+
 /* Other AMD Fam10h MSRs */
 #define MSR_FAM10H_MMIO_CONF_BASE      0xc0010058
 #define FAM10H_MMIO_CONF_ENABLE         (1<<0)