x86, intel: Clear Error counter field when set new cmci owner
authorKeir Fraser <keir.fraser@citrix.com>
Mon, 29 Dec 2008 13:30:14 +0000 (13:30 +0000)
committerKeir Fraser <keir.fraser@citrix.com>
Mon, 29 Dec 2008 13:30:14 +0000 (13:30 +0000)
Since cmci might happened when cpu is taking down (cpu hotplug) before
setting new cmci owner while old owner is down. We need to clear the
corrected error counter field to make sure CMCI could be triggered on
the new owner.

Signed-off-by: Yunhong Jiang <yunhong.jiang@intel.com>
Signed-off-by: Liping Ke <liping.ke@intel.com>
xen/arch/x86/cpu/mcheck/mce_intel.c
xen/arch/x86/cpu/mcheck/x86_mca.h

index e5ce422617bd8a2184ed59434d25cc679f92b37c..448fe328cf7ddf4eda675ccbebedbadd748a0b23 100644 (file)
@@ -358,6 +358,12 @@ static int do_cmci_discover(int i)
         return 0;
     }
     set_bit(i, __get_cpu_var(mce_banks_owned));
+    /* Clear Corected Error Counter field, make sure CMCI could 
+     * be triggered on the new owner
+     */
+    msr = MSR_IA32_MC0_STATUS + 4 * i;
+    rdmsrl(msr, val);
+    wrmsrl(msr, val & ~MCi_STATUS_ERRCOUNT);
 out:
     clear_bit(i, __get_cpu_var(no_cmci_banks));
     return 1;
index df3899bbfe6f1e35fe258fb0768f7d8db1bbec6b..c0ad6ce7613e0a002eb9e5b6eeac39da0ce38600 100644 (file)
@@ -46,6 +46,8 @@
 #define MCi_STATUS_MSEC         0x00000000ffff0000ULL
 /* Other information */
 #define MCi_STATUS_OTHER        0x01ffffff00000000ULL
+/*Corrected Error Count*/
+#define MCi_STATUS_ERRCOUNT     0x001FFFC0000000000ULL 
 /* processor context corrupt */
 #define MCi_STATUS_PCC          0x0200000000000000ULL
 /* MSR_K8_MCi_ADDR register valid */