[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Xen-changelog] [xen-unstable] mce: k7 cleanup



# HG changeset patch
# User Keir Fraser <keir.fraser@xxxxxxxxxx>
# Date 1277331837 -3600
# Node ID f908097d4ca45446d85fcb1e4935c83273399ab6
# Parent  c362e793f0a039fbacaf51ef01cefda5792f0032
mce: k7 cleanup

Signed-off-by: Christoph Egger <Christoph.Egger@xxxxxxx>
---
 xen/arch/x86/cpu/mcheck/k7.c |   70 ++++++++++++++++++++++---------------------
 1 files changed, 36 insertions(+), 34 deletions(-)

diff -r c362e793f0a0 -r f908097d4ca4 xen/arch/x86/cpu/mcheck/k7.c
--- a/xen/arch/x86/cpu/mcheck/k7.c      Wed Jun 23 23:23:22 2010 +0100
+++ b/xen/arch/x86/cpu/mcheck/k7.c      Wed Jun 23 23:23:57 2010 +0100
@@ -19,51 +19,53 @@
 /* Machine Check Handler For AMD Athlon/Duron */
 static fastcall void k7_machine_check(struct cpu_user_regs * regs, long 
error_code)
 {
-       int recover=1;
-       u32 alow, ahigh, high, low;
-       u32 mcgstl, mcgsth;
+       int recover = 1;
+       uint64_t msr_content, mcgst;
        int i;
 
-       rdmsr (MSR_IA32_MCG_STATUS, mcgstl, mcgsth);
-       if (mcgstl & (1<<0))    /* Recoverable ? */
-               recover=0;
+       rdmsrl(MSR_IA32_MCG_STATUS, mcgst);
+       if (mcgst & MCG_STATUS_RIPV)    /* Recoverable ? */
+               recover = 0;
 
-       printk (KERN_EMERG "CPU %d: Machine Check Exception: %08x%08x\n",
-               smp_processor_id(), mcgsth, mcgstl);
+       printk(KERN_EMERG "CPU %d: Machine Check Exception: 0x%016"PRIx64"\n",
+               smp_processor_id(), mcgst);
 
-       for (i=1; i<nr_mce_banks; i++) {
-               rdmsr (MSR_IA32_MCx_STATUS(i),low, high);
-               if (high&(1<<31)) {
-                       if (high & (1<<29))
+       for (i = 1; i < nr_mce_banks; i++) {
+               uint64_t value;
+
+               rdmsrl(MSR_IA32_MCx_STATUS(i), msr_content);
+               if (msr_content & MCi_STATUS_VAL) {
+                       if (msr_content & MCi_STATUS_UC)
                                recover |= 1;
-                       if (high & (1<<25))
+                       if (msr_content & MCi_STATUS_PCC)
                                recover |= 2;
-                       printk (KERN_EMERG "Bank %d: %08x%08x", i, high, low);
-                       high &= ~(1<<31);
-                       if (high & (1<<27)) {
-                               rdmsr (MSR_IA32_MCx_MISC(i), alow, ahigh);
-                               printk ("[%08x%08x]", ahigh, alow);
+                       printk(KERN_EMERG "Bank %d: 0x%16"PRIx64,
+                               i, msr_content);
+                       msr_content &= ~MCi_STATUS_VAL;
+                       if (msr_content & MCi_STATUS_MISCV) {
+                               rdmsrl(MSR_IA32_MCx_MISC(i), value);
+                               printk("[0x%016"PRIx64"]", value);
                        }
-                       if (high & (1<<26)) {
-                               rdmsr (MSR_IA32_MCx_ADDR(i), alow, ahigh);
-                               printk (" at %08x%08x", ahigh, alow);
+                       if (msr_content & MCi_STATUS_ADDRV) {
+                               rdmsrl(MSR_IA32_MCx_ADDR(i), value);
+                               printk(" at 0x%016"PRIx64, value);
                        }
-                       printk ("\n");
+                       printk("\n");
                        /* Clear it */
-                       wrmsr (MSR_IA32_MCx_STATUS(i), 0UL, 0UL);
+                       wrmsrl(MSR_IA32_MCx_STATUS(i), 0x0ULL);
                        /* Serialize */
                        wmb();
                        add_taint(TAINT_MACHINE_CHECK);
                }
        }
 
-       if (recover&2)
-               mc_panic ("CPU context corrupt");
-       if (recover&1)
-               mc_panic ("Unable to continue");
-       printk (KERN_EMERG "Attempting to continue.\n");
-       mcgstl &= ~(1<<2);
-       wrmsr (MSR_IA32_MCG_STATUS,mcgstl, mcgsth);
+       if (recover & 2)
+               mc_panic("CPU context corrupt");
+       if (recover & 1)
+               mc_panic("Unable to continue");
+       printk(KERN_EMERG "Attempting to continue.\n");
+       mcgst &= ~MCG_STATUS_MCIP;
+       wrmsrl(MSR_IA32_MCG_STATUS, mcgst);
 }
 
 
@@ -76,10 +78,10 @@ enum mcheck_type amd_k7_mcheck_init(stru
 
        /* Clear status for MC index 0 separately, we don't touch CTL,
         * as some Athlons cause spurious MCEs when its enabled. */
-       wrmsr (MSR_IA32_MC0_STATUS, 0x0, 0x0);
-       for (i=1; i<nr_mce_banks; i++) {
-               wrmsr (MSR_IA32_MCx_CTL(i), 0xffffffff, 0xffffffff);
-               wrmsr (MSR_IA32_MCx_STATUS(i), 0x0, 0x0);
+       wrmsrl(MSR_IA32_MC0_STATUS, 0x0ULL);
+       for (i = 1; i < nr_mce_banks; i++) {
+               wrmsrl(MSR_IA32_MCx_CTL(i), 0xffffffffffffffffULL);
+               wrmsrl(MSR_IA32_MCx_STATUS(i), 0x0ULL);
        }
 
        return mcheck_amd_k7;

_______________________________________________
Xen-changelog mailing list
Xen-changelog@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-changelog


 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.