vMCE: Implement AMD MSRs
authorChristoph Egger <Christoph.Egger@amd.com>
Tue, 23 Oct 2012 11:10:54 +0000 (04:10 -0700)
committerChristoph Egger <Christoph.Egger@amd.com>
Tue, 23 Oct 2012 11:10:54 +0000 (04:10 -0700)
Signed-off-by: Christoph Egger <Christoph.Egger@amd.com>
Committed-by: Keir Fraser <keir@xen.org>
xen/arch/x86/cpu/mcheck/amd_f10.c

index 1d9067c3f774019d02c70ad191dd6ba4bb91797d..487fbce893dfc0b5688310f7fa317c2e5216803c 100644 (file)
@@ -106,24 +106,43 @@ enum mcheck_type amd_f10_mcheck_init(struct cpuinfo_x86 *c)
 /* amd specific MCA MSR */
 int vmce_amd_wrmsr(struct vcpu *v, uint32_t msr, uint64_t val)
 {
-        switch (msr) {
-        case MSR_F10_MC4_MISC1:
-        case MSR_F10_MC4_MISC2:
-        case MSR_F10_MC4_MISC3:
-                break;
-        }
-
-        return 1;
+       switch (msr) {
+       case MSR_F10_MC4_MISC1: /* DRAM error type */
+               v->arch.vmce.bank[1].mci_misc = val; 
+               mce_printk(MCE_VERBOSE, "MCE: wr msr %#"PRIx64"\n", val);
+               break;
+       case MSR_F10_MC4_MISC2: /* Link error type */
+       case MSR_F10_MC4_MISC3: /* L3 cache error type */
+               /* ignore write: we do not emulate link and l3 cache errors
+                * to the guest.
+                */
+               mce_printk(MCE_VERBOSE, "MCE: wr msr %#"PRIx64"\n", val);
+               break;
+       default:
+               return 0;
+       }
+
+       return 1;
 }
 
 int vmce_amd_rdmsr(const struct vcpu *v, uint32_t msr, uint64_t *val)
 {
-        switch (msr) {
-        case MSR_F10_MC4_MISC1:
-        case MSR_F10_MC4_MISC2:
-        case MSR_F10_MC4_MISC3:
-                break;
-        }
-
-        return 1;
+       switch (msr) {
+       case MSR_F10_MC4_MISC1: /* DRAM error type */
+               *val = v->arch.vmce.bank[1].mci_misc;
+               mce_printk(MCE_VERBOSE, "MCE: rd msr %#"PRIx64"\n", *val);
+               break;
+       case MSR_F10_MC4_MISC2: /* Link error type */
+       case MSR_F10_MC4_MISC3: /* L3 cache error type */
+               /* we do not emulate link and l3 cache
+                * errors to the guest.
+                */
+               *val = 0;
+               mce_printk(MCE_VERBOSE, "MCE: rd msr %#"PRIx64"\n", *val);
+               break;
+       default:
+               return 0;
+       }
+
+       return 1;
 }