 
	
| [Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Xen-devel] [PATCH 1/2] Xen/MCA: bugfix for mca bank clear
 Xen/MCA: bugfix for mca bank clear
mcabank_clear() is common code for real h/w mca and s/w simulated mca.
Under s/w simulated case, getting status via mca_rdmsr may trigger #GP
if MCx_ADDR/MISC not supported by real h/w.
This patch fix the bug. It always invalidates intpose for s/w simulated
mca case, and do check real h/w status ADDRV/MISCV to avoid #GP when
clear MCx_ADDR/MISC for h/w mca case.
Reported-by: Ren Yongjie <yongjie.ren@xxxxxxxxx>
Singed-off-by: Liu Jinsong <jinsong.liu@xxxxxxxxx>
diff -r e84a79d11d7a xen/arch/x86/cpu/mcheck/mce.c
--- a/xen/arch/x86/cpu/mcheck/mce.c     Thu Nov 01 01:41:03 2012 +0800
+++ b/xen/arch/x86/cpu/mcheck/mce.c     Thu Feb 28 08:05:15 2013 +0800
@@ -138,17 +138,28 @@
     xfree(banks);
 }
 
+/*
+ * Common code for real h/w mca and s/w simulated mca.
+ * Always invalidate intpose for s/w simulated mca case, and do check
+ * real h/w status ADDRV/MISCV to avoid #GP when clear MCx_ADDR/MISC
+ * for h/w mca case.
+ */
 static void mcabank_clear(int banknum)
 {
-    uint64_t status;
+    uint64_t hw_status;
 
-    status = mca_rdmsr(MSR_IA32_MCx_STATUS(banknum));
+    /* For s/w simulated mca case */
+    intpose_inval(smp_processor_id(), MSR_IA32_MCx_ADDR(banknum));
+    intpose_inval(smp_processor_id(), MSR_IA32_MCx_MISC(banknum));
 
-    if (status & MCi_STATUS_ADDRV)
-        mca_wrmsr(MSR_IA32_MCx_ADDR(banknum), 0x0ULL);
-    if (status & MCi_STATUS_MISCV)
-        mca_wrmsr(MSR_IA32_MCx_MISC(banknum), 0x0ULL);
+    /* For real h/w mca case */
+    rdmsrl(MSR_IA32_MCx_STATUS(banknum), hw_status);
+    if (hw_status & MCi_STATUS_ADDRV)
+        wrmsrl(MSR_IA32_MCx_ADDR(banknum), 0x0ULL);
+    if (hw_status & MCi_STATUS_MISCV)
+        wrmsrl(MSR_IA32_MCx_MISC(banknum), 0x0ULL);
 
+    /* For both cases */
     mca_wrmsr(MSR_IA32_MCx_STATUS(banknum), 0x0ULL);
 }
 Attachment:
mca-bank-clear-bugfix.patch _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxx http://lists.xen.org/xen-devel 
 
 | 
|  | Lists.xenproject.org is hosted with RackSpace, monitoring our |