All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH 1] MCA bank extension
@ 2011-05-07 20:24 Liu, Jinsong
  0 siblings, 0 replies; only message in thread
From: Liu, Jinsong @ 2011-05-07 20:24 UTC (permalink / raw)
  To: Keir Fraser, xen-devel; +Cc: Jiang, Yunhong, Li, Xin

[-- Attachment #1: Type: text/plain, Size: 2811 bytes --]

MCA bank extension

Current mca_summay use uint32_t as bitmask of bank uc/pcc/recoverable.
It's not extensible, support no more than 32 mca banks, 
while according to Intel SDM, bank number could be as much as 256.

This patch use bool_t flag since it only need to record and indicate the most severity case.

Signed-off-by: Liu, Jinsong <jinsong.liu@intel.com>

diff -r eb4505f8dd97 xen/arch/x86/cpu/mcheck/mce.c
--- a/xen/arch/x86/cpu/mcheck/mce.c	Wed Apr 20 12:02:51 2011 +0100
+++ b/xen/arch/x86/cpu/mcheck/mce.c	Wed Apr 27 15:29:31 2011 +0800
@@ -246,7 +246,8 @@ mctelem_cookie_t mcheck_mca_logout(enum 
     uint64_t gstatus, status;
     struct mcinfo_global *mig = NULL; /* on stack */
     mctelem_cookie_t mctc = NULL;
-    uint32_t uc = 0, pcc = 0, recover, need_clear = 1, mc_flags = 0;
+    bool_t uc = 0, pcc = 0, recover = 1, need_clear = 1;
+    uint32_t mc_flags = 0;
     struct mc_info *mci = NULL;
     mctelem_class_t which = MC_URGENT; /* XXXgcc */
     int errcnt = 0;
@@ -280,7 +281,7 @@ mctelem_cookie_t mcheck_mca_logout(enum 
      */
     recover = (mc_recoverable_scan)? 1: 0;
 
-    for (i = 0; i < 32 && i < nr_mce_banks; i++) {
+    for (i = 0; i < nr_mce_banks; i++) {
         struct mcinfo_bank *mib;  /* on stack */
 
         /* Skip bank if corresponding bit in bankmask is clear */
@@ -324,13 +325,13 @@ mctelem_cookie_t mcheck_mca_logout(enum 
             }
         }
 
-        /* form a mask of which banks have logged uncorrected errors */
-        if ((status & MCi_STATUS_UC) != 0)
-            uc |= (1 << i);
+        /* flag for uncorrected errors */
+        if (!uc && ((status & MCi_STATUS_UC) != 0))
+            uc = 1;
 
-        /* likewise for those with processor context corrupt */
-        if ((status & MCi_STATUS_PCC) != 0)
-            pcc |= (1 << i);
+        /* flag processor context corrupt */
+        if (!pcc && ((status & MCi_STATUS_PCC) != 0))
+            pcc = 1;
 
         if (recover && uc)
             /* uc = 1, recover = 1, we need not panic.
diff -r eb4505f8dd97 xen/arch/x86/cpu/mcheck/mce.h
--- a/xen/arch/x86/cpu/mcheck/mce.h	Wed Apr 20 12:02:51 2011 +0100
+++ b/xen/arch/x86/cpu/mcheck/mce.h	Wed Apr 27 15:29:31 2011 +0800
@@ -119,10 +119,9 @@ struct mca_summary {
 	uint32_t	errcnt;	/* number of banks with valid errors */
 	int		ripv;	/* meaningful on #MC */
 	int		eipv;	/* meaningful on #MC */
-	uint32_t	uc;	/* bitmask of banks with UC */
-	uint32_t	pcc;	/* bitmask of banks with PCC */
-	/* bitmask of banks with software error recovery ability*/
-	uint32_t	recoverable; 
+	bool_t		uc;	/* UC flag */
+	bool_t		pcc;	/* PCC flag */
+	bool_t		recoverable; /* software error recoverable flag */
 };
 
 DECLARE_PER_CPU(struct mca_banks *, poll_bankmask);

[-- Attachment #2: mca-cleanup-1.patch --]
[-- Type: application/octet-stream, Size: 2744 bytes --]

MCA bank extension

Current mca_summay use uint32_t as bitmask of bank uc/pcc/recoverable.
It's not extensible, support no more than 32 mca banks, 
while according to Intel SDM, bank number could be as much as 256.

This patch use bool_t flag since it only need to record and indicate the most severity case.

Signed-off-by: Liu, Jinsong <jinsong.liu@intel.com>

diff -r eb4505f8dd97 xen/arch/x86/cpu/mcheck/mce.c
--- a/xen/arch/x86/cpu/mcheck/mce.c	Wed Apr 20 12:02:51 2011 +0100
+++ b/xen/arch/x86/cpu/mcheck/mce.c	Wed Apr 27 15:29:31 2011 +0800
@@ -246,7 +246,8 @@ mctelem_cookie_t mcheck_mca_logout(enum 
     uint64_t gstatus, status;
     struct mcinfo_global *mig = NULL; /* on stack */
     mctelem_cookie_t mctc = NULL;
-    uint32_t uc = 0, pcc = 0, recover, need_clear = 1, mc_flags = 0;
+    bool_t uc = 0, pcc = 0, recover = 1, need_clear = 1;
+    uint32_t mc_flags = 0;
     struct mc_info *mci = NULL;
     mctelem_class_t which = MC_URGENT; /* XXXgcc */
     int errcnt = 0;
@@ -280,7 +281,7 @@ mctelem_cookie_t mcheck_mca_logout(enum 
      */
     recover = (mc_recoverable_scan)? 1: 0;
 
-    for (i = 0; i < 32 && i < nr_mce_banks; i++) {
+    for (i = 0; i < nr_mce_banks; i++) {
         struct mcinfo_bank *mib;  /* on stack */
 
         /* Skip bank if corresponding bit in bankmask is clear */
@@ -324,13 +325,13 @@ mctelem_cookie_t mcheck_mca_logout(enum 
             }
         }
 
-        /* form a mask of which banks have logged uncorrected errors */
-        if ((status & MCi_STATUS_UC) != 0)
-            uc |= (1 << i);
+        /* flag for uncorrected errors */
+        if (!uc && ((status & MCi_STATUS_UC) != 0))
+            uc = 1;
 
-        /* likewise for those with processor context corrupt */
-        if ((status & MCi_STATUS_PCC) != 0)
-            pcc |= (1 << i);
+        /* flag processor context corrupt */
+        if (!pcc && ((status & MCi_STATUS_PCC) != 0))
+            pcc = 1;
 
         if (recover && uc)
             /* uc = 1, recover = 1, we need not panic.
diff -r eb4505f8dd97 xen/arch/x86/cpu/mcheck/mce.h
--- a/xen/arch/x86/cpu/mcheck/mce.h	Wed Apr 20 12:02:51 2011 +0100
+++ b/xen/arch/x86/cpu/mcheck/mce.h	Wed Apr 27 15:29:31 2011 +0800
@@ -119,10 +119,9 @@ struct mca_summary {
 	uint32_t	errcnt;	/* number of banks with valid errors */
 	int		ripv;	/* meaningful on #MC */
 	int		eipv;	/* meaningful on #MC */
-	uint32_t	uc;	/* bitmask of banks with UC */
-	uint32_t	pcc;	/* bitmask of banks with PCC */
-	/* bitmask of banks with software error recovery ability*/
-	uint32_t	recoverable; 
+	bool_t		uc;	/* UC flag */
+	bool_t		pcc;	/* PCC flag */
+	bool_t		recoverable; /* software error recoverable flag */
 };
 
 DECLARE_PER_CPU(struct mca_banks *, poll_bankmask);

[-- Attachment #3: Type: text/plain, Size: 138 bytes --]

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

^ permalink raw reply	[flat|nested] only message in thread

only message in thread, other threads:[~2011-05-07 20:24 UTC | newest]

Thread overview: (only message) (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2011-05-07 20:24 [PATCH 1] MCA bank extension Liu, Jinsong

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.