From: Borislav Petkov <borislav.petkov@amd.com>
To: <mingo@elte.hu>, <hpa@zytor.com>, <tglx@linutronix.de>,
<norsk5@yahoo.com>, <aris@redhat.com>
Cc: <linux-kernel@vger.kernel.org>, <x86@kernel.org>
Subject: [PATCH 04/14] amd64_edac: fixup ExtError decoding
Date: Mon, 20 Jul 2009 18:12:55 +0200 [thread overview]
Message-ID: <1248106385-27514-5-git-send-email-borislav.petkov@amd.com> (raw)
In-Reply-To: <1248106385-27514-1-git-send-email-borislav.petkov@amd.com>
Beef up NB error signatures too. Remove unneeded/unused fragments while
at it.
Signed-off-by: Borislav Petkov <borislav.petkov@amd.com>
---
drivers/edac/amd64_edac.c | 28 ++++----------
drivers/edac/amd64_edac.h | 11 +-----
drivers/edac/amd64_edac_err_types.c | 71 ++++++++++++++++++-----------------
3 files changed, 46 insertions(+), 64 deletions(-)
diff --git a/drivers/edac/amd64_edac.c b/drivers/edac/amd64_edac.c
index 591d28d..d53f0f6 100644
--- a/drivers/edac/amd64_edac.c
+++ b/drivers/edac/amd64_edac.c
@@ -2300,7 +2300,7 @@ void amd64_decode_nb_mce(struct mem_ctl_info *mci, struct err_regs *regs,
int handle_errors)
{
struct amd64_pvt *pvt = mci->pvt_info;
- u32 err_code, ext_ec;
+ u32 ec, xec;
int ecc;
if (!handle_errors)
@@ -2335,9 +2335,10 @@ void amd64_decode_nb_mce(struct mem_ctl_info *mci, struct err_regs *regs,
pr_cont("\n");
- err_code = ERROR_CODE(regs->nbsl);
+ ec = ERROR_CODE(regs->nbsl);
+ xec = EXT_ERROR_CODE(regs->nbsl);
- if (TLB_ERROR(err_code)) {
+ if (TLB_ERROR(ec)) {
/*
* GART errors are intended to help graphics driver developers
* to detect bad GART PTEs. It is recommended by AMD to disable
@@ -2355,33 +2356,20 @@ void amd64_decode_nb_mce(struct mem_ctl_info *mci, struct err_regs *regs,
pr_emerg("GART TLB error\n");
amd64_decode_gart_tlb_error(mci, regs);
- } else if (MEM_ERROR(err_code)) {
+ } else if (MEM_ERROR(ec)) {
pr_emerg("Memory/Cache error\n");
amd64_decode_mem_cache_error(mci, regs);
- } else if (BUS_ERROR(err_code)) {
+ } else if (BUS_ERROR(ec)) {
pr_emerg("Bus (Link/DRAM) error\n");
amd64_decode_bus_error(mci, regs);
} else {
/* shouldn't reach here! */
amd64_mc_printk(mci, KERN_WARNING,
"%s(): unknown MCE error 0x%x\n", __func__,
- err_code);
+ ec);
}
- ext_ec = EXT_ERROR_CODE(regs->nbsl);
- amd64_mc_printk(mci, KERN_ERR,
- "ExtErr=(0x%x) %s\n", ext_ec, ext_msgs[ext_ec]);
-
- if (((ext_ec >= F10_NBSL_EXT_ERR_CRC &&
- ext_ec <= F10_NBSL_EXT_ERR_TGT) ||
- (ext_ec == F10_NBSL_EXT_ERR_RMW)) &&
- EXTRACT_LDT_LINK(regs->nbsh)) {
-
- amd64_mc_printk(mci, KERN_ERR,
- "Error on hypertransport link: %s\n",
- htlink_msgs[
- EXTRACT_LDT_LINK(regs->nbsh)]);
- }
+ pr_emerg("%s.\n", EXT_ERR_DESC(xec));
/*
* Check the UE bit of the NB status high register, if set generate some
diff --git a/drivers/edac/amd64_edac.h b/drivers/edac/amd64_edac.h
index a75ba80..6e3a9a7 100644
--- a/drivers/edac/amd64_edac.h
+++ b/drivers/edac/amd64_edac.h
@@ -305,16 +305,7 @@ enum {
/* Family F10h: Normalized Extended Error Codes */
#define F10_NBSL_EXT_ERR_RES 0x0
-#define F10_NBSL_EXT_ERR_CRC 0x1
-#define F10_NBSL_EXT_ERR_SYNC 0x2
-#define F10_NBSL_EXT_ERR_MST 0x3
-#define F10_NBSL_EXT_ERR_TGT 0x4
-#define F10_NBSL_EXT_ERR_GART 0x5
-#define F10_NBSL_EXT_ERR_RMW 0x6
-#define F10_NBSL_EXT_ERR_WDT 0x7
#define F10_NBSL_EXT_ERR_ECC 0x8
-#define F10_NBSL_EXT_ERR_DEV 0x9
-#define F10_NBSL_EXT_ERR_LINK_DATA 0xA
/* Next two are overloaded values */
#define F10_NBSL_EXT_ERR_LINK_PROTO 0xB
@@ -347,6 +338,7 @@ enum {
#define ERROR_CODE(x) ((x) & 0xffff)
#define EXT_ERROR_CODE(x) (((x) >> 16) & 0x1f)
+#define EXT_ERR_DESC(x) ext_msgs[(EXT_ERROR_CODE((x)))]
#define LOW_SYNDROME(x) (((x) >> 15) & 0xff)
#define HIGH_SYNDROME(x) (((x) >> 24) & 0xff)
@@ -384,7 +376,6 @@ enum {
#define K8_NBSH_UECC BIT(13)
#define K8_NBSH_ERR_SCRUBER BIT(8)
-#define EXTRACT_LDT_LINK(x) (((x) >> 4) & 0x7)
#define EXTRACT_ERR_CPU_MAP(x) ((x) & 0xF)
diff --git a/drivers/edac/amd64_edac_err_types.c b/drivers/edac/amd64_edac_err_types.c
index cacdd54..19aa756 100644
--- a/drivers/edac/amd64_edac_err_types.c
+++ b/drivers/edac/amd64_edac_err_types.c
@@ -106,40 +106,43 @@ const char *ii_msgs[] = { /* memory or i/o */
"Generic"
};
-/* Map the 5 bits of Extended Error code to the string table. */
-const char *ext_msgs[] = { /* extended error */
- "K8 ECC error/F10 reserved", /* 0_0000b */
- "CRC error", /* 0_0001b */
- "sync error", /* 0_0010b */
- "mst abort", /* 0_0011b */
- "tgt abort", /* 0_0100b */
- "GART error", /* 0_0101b */
- "RMW error", /* 0_0110b */
- "Wdog timer error", /* 0_0111b */
- "F10-ECC/K8-Chipkill error", /* 0_1000b */
- "DEV Error", /* 0_1001b */
- "Link Data error", /* 0_1010b */
- "Link or L3 Protocol error", /* 0_1011b */
- "NB Array error", /* 0_1100b */
- "DRAM Parity error", /* 0_1101b */
- "Link Retry/GART Table Walk/DEV Table Walk error", /* 0_1110b */
- "Res 0x0ff error", /* 0_1111b */
- "Res 0x100 error", /* 1_0000b */
- "Res 0x101 error", /* 1_0001b */
- "Res 0x102 error", /* 1_0010b */
- "Res 0x103 error", /* 1_0011b */
- "Res 0x104 error", /* 1_0100b */
- "Res 0x105 error", /* 1_0101b */
- "Res 0x106 error", /* 1_0110b */
- "Res 0x107 error", /* 1_0111b */
- "Res 0x108 error", /* 1_1000b */
- "Res 0x109 error", /* 1_1001b */
- "Res 0x10A error", /* 1_1010b */
- "Res 0x10B error", /* 1_1011b */
- "L3 Cache Data error", /* 1_1100b */
- "L3 CacheTag error", /* 1_1101b */
- "L3 Cache LRU error", /* 1_1110b */
- "Res 0x1FF error" /* 1_1111b */
+/*
+ * Map the 4 or 5 (family-specific) bits of Extended Error code to the
+ * string table.
+ */
+const char *ext_msgs[] = {
+ "K8 ECC error", /* 0_0000b */
+ "CRC error on link", /* 0_0001b */
+ "Sync error packets on link", /* 0_0010b */
+ "Master Abort during link operation", /* 0_0011b */
+ "Target Abort during link operation", /* 0_0100b */
+ "Invalid GART PTE entry during table walk", /* 0_0101b */
+ "Unsupported atomic RMW command received", /* 0_0110b */
+ "WDT error: NB transaction timeout", /* 0_0111b */
+ "ECC/ChipKill ECC error", /* 0_1000b */
+ "SVM DEV Error", /* 0_1001b */
+ "Link Data error", /* 0_1010b */
+ "Link/L3/Probe Filter Protocol error", /* 0_1011b */
+ "NB Internal Arrays Parity error", /* 0_1100b */
+ "DRAM Address/Control Parity error", /* 0_1101b */
+ "Link Transmission error", /* 0_1110b */
+ "GART/DEV Table Walk Data error" /* 0_1111b */
+ "Res 0x100 error", /* 1_0000b */
+ "Res 0x101 error", /* 1_0001b */
+ "Res 0x102 error", /* 1_0010b */
+ "Res 0x103 error", /* 1_0011b */
+ "Res 0x104 error", /* 1_0100b */
+ "Res 0x105 error", /* 1_0101b */
+ "Res 0x106 error", /* 1_0110b */
+ "Res 0x107 error", /* 1_0111b */
+ "Res 0x108 error", /* 1_1000b */
+ "Res 0x109 error", /* 1_1001b */
+ "Res 0x10A error", /* 1_1010b */
+ "Res 0x10B error", /* 1_1011b */
+ "ECC error in L3 Cache Data", /* 1_1100b */
+ "L3 Cache Tag error", /* 1_1101b */
+ "L3 Cache LRU Parity error", /* 1_1110b */
+ "Probe Filter error" /* 1_1111b */
};
const char *htlink_msgs[] = {
--
1.6.3.3
next prev parent reply other threads:[~2009-07-20 16:14 UTC|newest]
Thread overview: 36+ messages / expand[flat|nested] mbox.gz Atom feed top
2009-07-20 16:12 [RFC PATCH 0/14] amd64_edac: marry mcheck to amd64 edac Borislav Petkov
2009-07-20 16:12 ` [PATCH 01/14] amd64_edac: simplify error type bits extractors Borislav Petkov
2009-07-20 17:56 ` Aristeu Rozanski
2009-07-21 9:40 ` Borislav Petkov
2009-07-20 16:12 ` [PATCH 02/14] amd64_edac: cleanup amd64_process_error_info Borislav Petkov
2009-07-20 16:12 ` [PATCH 03/14] amd64_edac: cleanup/complete NB MCE decoding Borislav Petkov
2009-07-20 16:12 ` Borislav Petkov [this message]
2009-07-20 16:12 ` [PATCH 05/14] amd64_edac: remove memory and GART TLB error decoders Borislav Petkov
2009-07-20 16:12 ` [PATCH 06/14] amd64_edac: cleanup amd64_decode_bus_error Borislav Petkov
2009-07-20 16:12 ` [PATCH 07/14] mce3: pass mce info to EDAC for decoding Borislav Petkov
2009-07-20 18:04 ` Andi Kleen
2009-07-20 18:27 ` Doug Thompson
2009-07-20 19:22 ` Andi Kleen
2009-07-20 20:17 ` H. Peter Anvin
2009-07-20 21:02 ` Doug Thompson
2009-07-21 3:41 ` Hidetoshi Seto
2009-07-21 6:51 ` Andi Kleen
2009-07-21 10:49 ` Borislav Petkov
2009-08-04 14:45 ` Ingo Molnar
2009-07-20 21:00 ` Doug Thompson
2009-07-20 19:44 ` [PATCH 07/14] mce3: pass mce info to EDAC for decoding II Andi Kleen
2009-07-21 10:51 ` Borislav Petkov
2009-07-21 11:07 ` Andi Kleen
2009-07-21 12:52 ` Borislav Petkov
2009-07-21 10:44 ` [PATCH 07/14] mce3: pass mce info to EDAC for decoding Borislav Petkov
2009-07-21 11:04 ` Andi Kleen
2009-07-21 12:56 ` Borislav Petkov
2009-07-20 16:12 ` [PATCH 08/14] amd64_edac: carve out MCi_STATUS decoding Borislav Petkov
2009-07-20 16:13 ` [PATCH 09/14] amd64_edac: carve out decoding of MCi_STATUS ErrorCode Borislav Petkov
2009-07-20 16:13 ` [PATCH 10/14] amd64_edac: decode data cache MCEs Borislav Petkov
2009-07-20 16:13 ` [PATCH 11/14] amd64_edac: decode instruction " Borislav Petkov
2009-07-20 16:13 ` [PATCH 12/14] amd64_edac: decode bus unit MCEs Borislav Petkov
2009-07-20 16:13 ` [PATCH 13/14] amd64_edac: decode load store MCEs Borislav Petkov
2009-07-20 16:13 ` [PATCH 14/14] amd64_edac: decode FR MCEs Borislav Petkov
2009-07-20 17:24 ` [RFC PATCH 0/14] amd64_edac: marry mcheck to amd64 edac Doug Thompson
2009-07-21 3:52 ` Hidetoshi Seto
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=1248106385-27514-5-git-send-email-borislav.petkov@amd.com \
--to=borislav.petkov@amd.com \
--cc=aris@redhat.com \
--cc=hpa@zytor.com \
--cc=linux-kernel@vger.kernel.org \
--cc=mingo@elte.hu \
--cc=norsk5@yahoo.com \
--cc=tglx@linutronix.de \
--cc=x86@kernel.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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox
all inboxes | Powered by JetHome®