summaryrefslogtreecommitdiffstats
path: root/drivers/edac
diff options
context:
space:
mode:
authorYazen Ghannam <Yazen.Ghannam@amd.com>2017-02-15 15:56:22 -0500
committerBorislav Petkov <bp@suse.de>2017-02-16 09:39:32 -0500
commit75bf2f6478cab9b0c1d7f5f674a765d1e2ad530e (patch)
tree4950012d3682f5e9e30b3287126bf1c8301616c8 /drivers/edac
parente62d2ca9d05c9b558d11114c6494e820728f8e9a (diff)
EDAC, mce_amd: Print IPID and Syndrome on a separate line
Currently, the IPID and Syndrome are printed on the same line as the Address. There are cases when we can have a valid Syndrome but not a valid Address. For example, the MCA_SYND register can be used to hold more detailed error info that the hardware folks can use. It's not just DRAM ECC syndromes. There are some error types that aren't related to memory that may have valid syndromes, like some errors related to links in the Data Fabric, etc. In these cases, the IPID and Syndrome are not printed at the same log level as the rest of the stanza, so users won't see them on the console. Console: [Hardware Error]: CPU:16 (17:1:0) MC22_STATUS[Over|CE|MiscV|-|-|-|-|SyndV|-]: 0xd82000000002080b [Hardware Error]: Power, Interrupts, etc. Extended Error Code: 2 Dmesg: [Hardware Error]: CPU:16 (17:1:0) MC22_STATUS[Over|CE|MiscV|-|-|-|-|SyndV|-]: 0xd82000000002080b , Syndrome: 0x000000010b404000, IPID: 0x0001002e00000002 [Hardware Error]: Power, Interrupts, etc. Extended Error Code: 2 Print the IPID first and on a new line. The IPID should always be printed on SMCA systems. The Syndrome will then be printed with the IPID and at the same log level when valid: [Hardware Error]: CPU:16 (17:1:0) MC22_STATUS[Over|CE|MiscV|-|-|-|-|SyndV|-]: 0xd82000000002080b [Hardware Error]: IPID: 0x0001002e00000002, Syndrome: 0x000000010b404000 [Hardware Error]: Power, Interrupts, etc. Extended Error Code: 2 Signed-off-by: Yazen Ghannam <Yazen.Ghannam@amd.com> Cc: linux-edac <linux-edac@vger.kernel.org> Link: http://lkml.kernel.org/r/1487192182-2474-1-git-send-email-Yazen.Ghannam@amd.com Signed-off-by: Borislav Petkov <bp@suse.de>
Diffstat (limited to 'drivers/edac')
-rw-r--r--drivers/edac/mce_amd.c9
1 files changed, 4 insertions, 5 deletions
diff --git a/drivers/edac/mce_amd.c b/drivers/edac/mce_amd.c
index 3acb3c0231f2..27513dca8009 100644
--- a/drivers/edac/mce_amd.c
+++ b/drivers/edac/mce_amd.c
@@ -991,20 +991,19 @@ int amd_decode_mce(struct notifier_block *nb, unsigned long val, void *data)
991 pr_cont("]: 0x%016llx\n", m->status); 991 pr_cont("]: 0x%016llx\n", m->status);
992 992
993 if (m->status & MCI_STATUS_ADDRV) 993 if (m->status & MCI_STATUS_ADDRV)
994 pr_emerg(HW_ERR "Error Addr: 0x%016llx", m->addr); 994 pr_emerg(HW_ERR "Error Addr: 0x%016llx\n", m->addr);
995 995
996 if (boot_cpu_has(X86_FEATURE_SMCA)) { 996 if (boot_cpu_has(X86_FEATURE_SMCA)) {
997 pr_emerg(HW_ERR "IPID: 0x%016llx", m->ipid);
998
997 if (m->status & MCI_STATUS_SYNDV) 999 if (m->status & MCI_STATUS_SYNDV)
998 pr_cont(", Syndrome: 0x%016llx", m->synd); 1000 pr_cont(", Syndrome: 0x%016llx", m->synd);
999 1001
1000 pr_cont(", IPID: 0x%016llx", m->ipid);
1001
1002 pr_cont("\n"); 1002 pr_cont("\n");
1003 1003
1004 decode_smca_errors(m); 1004 decode_smca_errors(m);
1005 goto err_code; 1005 goto err_code;
1006 } else 1006 }
1007 pr_cont("\n");
1008 1007
1009 if (!fam_ops) 1008 if (!fam_ops)
1010 goto err_code; 1009 goto err_code;