From: Christoph Egger <Christoph.Egger@amd.com>
To: "xen-devel@lists.xen.org" <xen-devel@lists.xen.org>
Subject: [PATCH] x86/MCE: Implement clearbank callback for AMD
Date: Fri, 12 Oct 2012 16:46:35 +0200 [thread overview]
Message-ID: <50782D4B.50607@amd.com> (raw)
[-- Attachment #1: Type: text/plain, Size: 348 bytes --]
Implement clearbank callbank for AMD.
Signed-off-by: Christoph Egger <Christoph.Egger@amd.com>
--
---to satisfy European Law for business letters:
Advanced Micro Devices GmbH
Einsteinring 24, 85689 Dornach b. Muenchen
Geschaeftsfuehrer: Alberto Bozzo
Sitz: Dornach, Gemeinde Aschheim, Landkreis Muenchen
Registergericht Muenchen, HRB Nr. 43632
[-- Attachment #2: xen_mce_clearbank.diff --]
[-- Type: text/plain, Size: 4701 bytes --]
diff -r 6b73078a4403 xen/arch/x86/cpu/mcheck/amd_k8.c
--- a/xen/arch/x86/cpu/mcheck/amd_k8.c Fri Oct 12 14:38:20 2012 +0200
+++ b/xen/arch/x86/cpu/mcheck/amd_k8.c Fri Oct 12 15:20:08 2012 +0200
@@ -72,7 +72,31 @@
/* Machine Check Handler for AMD K8 family series */
static void k8_machine_check(struct cpu_user_regs *regs, long error_code)
{
- mcheck_cmn_handler(regs, error_code, mca_allbanks, NULL);
+ mcheck_cmn_handler(regs, error_code, mca_allbanks,
+ __get_cpu_var(mce_clear_banks));
+}
+
+static int k8_need_clearbank_scan(enum mca_source who, uint64_t status)
+{
+ switch (who) {
+ case MCA_MCE_SCAN:
+ case MCA_MCE_HANDLER:
+ break;
+ default:
+ return 1;
+ }
+
+ /* For fatal error, it shouldn't be cleared so that sticky bank
+ * have chance to be handled after reboot by polling.
+ */
+ if ( (status & MCi_STATUS_UC) && (status & MCi_STATUS_PCC) )
+ return 0;
+ /* Spurious need clear bank */
+ if ( !(status & MCi_STATUS_OVER)
+ && (status & MCi_STATUS_UC) && !(status & MCi_STATUS_EN))
+ return 1;
+
+ return 1;
}
/* AMD K8 machine check */
@@ -85,6 +109,7 @@ enum mcheck_type amd_k8_mcheck_init(stru
mce_handler_init();
x86_mce_vector_register(k8_machine_check);
+ mce_need_clearbank_register(k8_need_clearbank_scan);
for (i = 0; i < nr_mce_banks; i++) {
if (quirkflag == MCEQUIRK_K8_GART && i == 4) {
diff -r 6b73078a4403 xen/arch/x86/cpu/mcheck/mce.c
--- a/xen/arch/x86/cpu/mcheck/mce.c Fri Oct 12 14:38:20 2012 +0200
+++ b/xen/arch/x86/cpu/mcheck/mce.c Fri Oct 12 15:20:08 2012 +0200
@@ -35,6 +35,10 @@ bool_t is_mc_panic;
unsigned int __read_mostly nr_mce_banks;
unsigned int __read_mostly firstbank;
+DEFINE_PER_CPU(struct mca_banks *, poll_bankmask);
+DEFINE_PER_CPU(struct mca_banks *, no_cmci_banks);
+DEFINE_PER_CPU(struct mca_banks *, mce_clear_banks);
+
static void intpose_init(void);
static void mcinfo_clear(struct mc_info *);
struct mca_banks *mca_allbanks;
diff -r 6b73078a4403 xen/arch/x86/cpu/mcheck/mce.h
--- a/xen/arch/x86/cpu/mcheck/mce.h Fri Oct 12 14:38:20 2012 +0200
+++ b/xen/arch/x86/cpu/mcheck/mce.h Fri Oct 12 15:20:08 2012 +0200
@@ -122,6 +122,7 @@ struct mca_summary {
DECLARE_PER_CPU(struct mca_banks *, poll_bankmask);
DECLARE_PER_CPU(struct mca_banks *, no_cmci_banks);
+DECLARE_PER_CPU(struct mca_banks *, mce_clear_banks);
extern bool_t cmci_support;
extern bool_t is_mc_panic;
diff -r 6b73078a4403 xen/arch/x86/cpu/mcheck/mce_intel.c
--- a/xen/arch/x86/cpu/mcheck/mce_intel.c Fri Oct 12 14:38:20 2012 +0200
+++ b/xen/arch/x86/cpu/mcheck/mce_intel.c Fri Oct 12 15:20:08 2012 +0200
@@ -21,9 +21,7 @@
#include "vmce.h"
#include "mcaction.h"
-DEFINE_PER_CPU(struct mca_banks *, mce_banks_owned);
-DEFINE_PER_CPU(struct mca_banks *, no_cmci_banks);
-DEFINE_PER_CPU(struct mca_banks *, mce_clear_banks);
+static DEFINE_PER_CPU(struct mca_banks *, mce_banks_owned);
bool_t __read_mostly cmci_support = 0;
static bool_t __read_mostly ser_support = 0;
static bool_t __read_mostly mce_force_broadcast;
diff -r 6b73078a4403 xen/arch/x86/cpu/mcheck/mctelem.h
--- a/xen/arch/x86/cpu/mcheck/mctelem.h Fri Oct 12 14:38:20 2012 +0200
+++ b/xen/arch/x86/cpu/mcheck/mctelem.h Fri Oct 12 15:20:08 2012 +0200
@@ -23,7 +23,7 @@
* urgent uses, intended for use from machine check exception handlers,
* and non-urgent uses intended for use from error pollers.
* Associated with each logout entry of whatever class is a data area
- * sized per the single argument to mctelem_init. mcelem_init should be
+ * sized per the single argument to mctelem_init. mctelem_init should be
* called from MCA init code before anybody has the chance to change the
* machine check vector with mcheck_mca_logout or to use mcheck_mca_logout.
*
@@ -45,7 +45,7 @@
* which will return a cookie referencing the oldest (first committed)
* entry of the requested class. Access the associated data using
* mctelem_dataptr and when finished use mctelem_consume_oldest_end - in the
- * begin .. end bracket you are guaranteed that the entry canot be freed
+ * begin .. end bracket you are guaranteed that the entry cannot be freed
* even if it is ack'd elsewhere). Once the ultimate consumer of the
* telemetry has processed it to stable storage it should acknowledge
* the telemetry quoting the cookie id, at which point we will free
diff -r 6b73078a4403 xen/arch/x86/cpu/mcheck/non-fatal.c
--- a/xen/arch/x86/cpu/mcheck/non-fatal.c Fri Oct 12 14:38:20 2012 +0200
+++ b/xen/arch/x86/cpu/mcheck/non-fatal.c Fri Oct 12 15:20:08 2012 +0200
@@ -23,7 +23,6 @@
#include "mce.h"
#include "vmce.h"
-DEFINE_PER_CPU(struct mca_banks *, poll_bankmask);
static struct timer mce_timer;
#define MCE_PERIOD MILLISECS(8000)
[-- Attachment #3: Type: text/plain, Size: 126 bytes --]
_______________________________________________
Xen-devel mailing list
Xen-devel@lists.xen.org
http://lists.xen.org/xen-devel
next reply other threads:[~2012-10-12 14:46 UTC|newest]
Thread overview: 12+ messages / expand[flat|nested] mbox.gz Atom feed top
2012-10-12 14:46 Christoph Egger [this message]
2012-10-19 13:11 ` [PATCH] x86/MCE: Implement clearbank callback for AMD Christoph Egger
2012-10-19 14:59 ` Jan Beulich
2012-10-24 12:18 ` Jan Beulich
2012-10-25 8:18 ` Christoph Egger
2012-10-25 8:55 ` Jan Beulich
2012-10-25 9:29 ` Christoph Egger
2012-10-25 10:03 ` Jan Beulich
2012-10-25 10:13 ` Christoph Egger
2012-10-25 10:23 ` Christoph Egger
2012-10-25 10:28 ` Jan Beulich
2012-10-25 10:30 ` Christoph Egger
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=50782D4B.50607@amd.com \
--to=christoph.egger@amd.com \
--cc=xen-devel@lists.xen.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
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.