From: "Christoph Egger" <Christoph.Egger@amd.com>
To: xen-devel@lists.xensource.com
Cc: Gavin.Maltby@sun.com, Keir Fraser <keir@xensource.com>,
Jan Beulich <jbeulich@novell.com>
Subject: [PATCH] resend 2/3: MCA/MCE correctable error handling
Date: Thu, 23 Aug 2007 11:23:59 +0200 [thread overview]
Message-ID: <200708231123.59900.Christoph.Egger@amd.com> (raw)
In-Reply-To: <200708230907.22196.Christoph.Egger@amd.com>
[-- Attachment #1: Type: text/plain, Size: 591 bytes --]
Yesterday I said, I will re-send this patch. Here is it.
It incorporates feedback from Jan Beulich.
Signed-off-by: Christoph Egger <Christoph.Egger@amd.com>
--
AMD Saxony, Dresden, Germany
Operating System Research Center
Legal Information:
AMD Saxony Limited Liability Company & Co. KG
Sitz (Geschäftsanschrift):
Wilschdorfer Landstr. 101, 01109 Dresden, Deutschland
Registergericht Dresden: HRA 4896
vertretungsberechtigter Komplementär:
AMD Saxony LLC (Sitz Wilmington, Delaware, USA)
Geschäftsführer der AMD Saxony LLC:
Dr. Hans-R. Deppe, Thomas McCoy
[-- Attachment #2: mca_diff2_headers.diff --]
[-- Type: text/x-diff, Size: 5406 bytes --]
diff -r 73832dfa9bcd -r 0fd5402a3730 xen/include/public/arch-x86/xen.h
--- a/xen/include/public/arch-x86/xen.h Thu Aug 23 09:51:13 2007 +0200
+++ b/xen/include/public/arch-x86/xen.h Thu Aug 23 10:20:43 2007 +0200
@@ -81,6 +81,108 @@ DEFINE_XEN_GUEST_HANDLE(xen_pfn_t);
#define MAX_VIRT_CPUS 32
#ifndef __ASSEMBLY__
+
+/*
+ * Machine Check Architecure:
+ * structs are read-only and used to report all kinds of
+ * correctable and uncorrectable errors detected by the HW.
+ * Dom0 and DomU: register a handler to get notified.
+ * Dom0 only: Correctable errors are reported via VIRQ_MCA
+ * Dom0 and DomU: Uncorrectable errors are reported via nmi handlers
+ */
+#define MC_TYPE_GLOBAL 0
+#define MC_TYPE_BANK 1
+
+struct mcinfo_common {
+ uint16_t type; /* structure type */
+ uint16_t size; /* size of this struct in bytes */
+};
+
+
+#define MC_FLAG_CORRECTABLE (1 << 0)
+#define MC_FLAG_UNCORRECTABLE (1 << 1)
+/* contains global x86 mc information */
+struct mcinfo_global {
+ struct mcinfo_common common;
+
+ uint16_t mc_domid; /* impacted domain */
+ uint32_t mc_socketid; /* physical socket of the physical core */
+ uint16_t mc_coreid; /* physical impacted core */
+ uint16_t mc_core_threadid; /* core thread of physical core */
+ uint16_t mc_vcpuid; /* virtual cpu scheduled for impacted domain */
+ uint64_t mc_gstatus; /* global status */
+ uint32_t mc_flags;
+};
+
+/* contains bank local x86 mc information */
+struct mcinfo_bank {
+ struct mcinfo_common common;
+
+ uint32_t mc_bank; /* bank nr */
+ uint64_t mc_status; /* bank status */
+ uint64_t mc_addr;
+ uint64_t mc_misc;
+};
+
+
+/* sizeof(struct mcinfo_global) + 6 * sizeof(struct mcinfo_bank) == 220.
+ * This is enough space to store mc information of up to six banks.
+ * 220 + sizeof(mi_nentries) = 224.
+ */
+#define MCINFO_MAXSIZE (224 - sizeof(uint32_t))
+
+struct arch_mc_info {
+ /* Number of mcinfo_* entries in mi_data */
+ uint32_t mi_nentries;
+
+ uint8_t mi_data[MCINFO_MAXSIZE];
+};
+typedef struct arch_mc_info arch_mc_info_t;
+
+
+
+/*
+ * OS's should use these instead of writing their own helper functions
+ * each with its own bugs and drawbacks.
+ * We use macros instead of static inline functions to allow guests
+ * to include this header in assembly files (*.S).
+ */
+/* Prototype:
+ * uint32_t x86_mcinfo_nentries(struct shared_info *si);
+ */
+#define x86_mcinfo_nentries(_si) \
+ (_si)->arch.mc_info.mi_nentries
+/* Prototype:
+ * struct mcinfo_common *x86_mcinfo_first(struct shared_info *si);
+ */
+#define x86_mcinfo_first(_si) \
+ (struct mcinfo_common *)((_si)->arch.mc_info.mi_data)
+/* Prototype:
+ * struct mcinfo_common *x86_mcinfo_next(struct mcinfo_common *mic);
+ */
+#define x86_mcinfo_next(_mic) \
+ (struct mcinfo_common *)((uint8_t *)(_mic) + (_mic)->size)
+
+/* Prototype:
+ * void x86_mcinfo_lookup(void *ret, struct shared_info *si, uint16_t type);
+ */
+#define x86_mcinfo_lookup(_ret, _si, _type) \
+ do { \
+ uint32_t found, i; \
+ struct mcinfo_common *_mic; \
+ \
+ _mic = x86_mcinfo_first(_si); \
+ found = 0; \
+ for (i = 0; i < x86_mcinfo_nentries(_si); i++) { \
+ if (_mic->type == (_type)) \
+ found = 1; \
+ else \
+ _mic = x86_mcinfo_next(_mic); \
+ } \
+ (_ret) = found ? _mic : NULL; \
+ } while (0)
+
+
typedef unsigned long xen_ulong_t;
@@ -173,7 +275,8 @@ struct arch_shared_info {
/* Frame containing list of mfns containing list of mfns containing p2m. */
xen_pfn_t pfn_to_mfn_frame_list_list;
unsigned long nmi_reason;
- uint64_t pad[32];
+ struct arch_mc_info mc_info; /* machine check information */
+ uint32_t pad[8];
};
typedef struct arch_shared_info arch_shared_info_t;
diff -r 73832dfa9bcd -r 0fd5402a3730 xen/include/public/foreign/reference.size
--- a/xen/include/public/foreign/reference.size Thu Aug 23 09:51:13 2007 +0200
+++ b/xen/include/public/foreign/reference.size Thu Aug 23 10:20:43 2007 +0200
@@ -13,6 +13,7 @@ arch_vcpu_info | 24
arch_vcpu_info | 24 16 0
vcpu_time_info | 32 32 32
vcpu_info | 64 64 48
+arch_mc_info | 224 224 -
arch_shared_info | 268 280 272
shared_info | 2584 3368 4384
diff -r 73832dfa9bcd -r 0fd5402a3730 xen/include/public/foreign/structs.py
--- a/xen/include/public/foreign/structs.py Thu Aug 23 09:51:13 2007 +0200
+++ b/xen/include/public/foreign/structs.py Thu Aug 23 10:20:43 2007 +0200
@@ -15,6 +15,7 @@ structs = [ "start_info",
"arch_vcpu_info",
"vcpu_time_info",
"vcpu_info",
+ "arch_mc_info",
"arch_shared_info",
"shared_info" ];
[-- Attachment #3: Type: text/plain, Size: 138 bytes --]
_______________________________________________
Xen-devel mailing list
Xen-devel@lists.xensource.com
http://lists.xensource.com/xen-devel
next prev parent reply other threads:[~2007-08-23 9:23 UTC|newest]
Thread overview: 9+ messages / expand[flat|nested] mbox.gz Atom feed top
2007-08-21 13:31 [PATCH] 2/3: MCA/MCE correctable error handling Christoph Egger
2007-08-21 15:53 ` Jan Beulich
2007-08-22 8:47 ` Christoph Egger
2007-08-22 10:01 ` Jan Beulich
2007-08-22 15:47 ` Christoph Egger
2007-08-22 16:13 ` Keir Fraser
2007-08-23 7:07 ` Christoph Egger
2007-08-23 9:23 ` Christoph Egger [this message]
2007-08-23 14:12 ` Keir Fraser
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=200708231123.59900.Christoph.Egger@amd.com \
--to=christoph.egger@amd.com \
--cc=Gavin.Maltby@sun.com \
--cc=jbeulich@novell.com \
--cc=keir@xensource.com \
--cc=xen-devel@lists.xensource.com \
/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.