summaryrefslogtreecommitdiff
path: root/drivers/edac/amd64_edac_dbg.c
diff options
context:
space:
mode:
authorBorislav Petkov <borislav.petkov@amd.com>2010-09-01 14:45:20 +0200
committerBorislav Petkov <bp@amd64.org>2010-10-21 14:47:58 +0200
commit7cfd4a87441f5ca3018fdd1f7ad67e8a73a05dc2 (patch)
treea74a1bb40d2ef3b5a66551562cdf775b63a27c8f /drivers/edac/amd64_edac_dbg.c
parent6337583d7dc0dced36ab98dd63de2389c95c22d9 (diff)
EDAC, MCE: Pass complete MCE info to decoders
... instead of the MCi_STATUS info only for improved handling of certain types of errors later. Signed-off-by: Borislav Petkov <borislav.petkov@amd.com>
Diffstat (limited to 'drivers/edac/amd64_edac_dbg.c')
-rw-r--r--drivers/edac/amd64_edac_dbg.c10
1 files changed, 8 insertions, 2 deletions
diff --git a/drivers/edac/amd64_edac_dbg.c b/drivers/edac/amd64_edac_dbg.c
index 22ef3fecf569..f6d5695de5b6 100644
--- a/drivers/edac/amd64_edac_dbg.c
+++ b/drivers/edac/amd64_edac_dbg.c
@@ -10,11 +10,14 @@ static ssize_t amd64_nbea_store(struct mem_ctl_info *mci, const char *data,
size_t count)
{
struct amd64_pvt *pvt = mci->pvt_info;
- unsigned long long value;
+ u64 value;
int ret = 0;
+ struct mce m;
ret = strict_strtoull(data, 16, &value);
if (ret != -EINVAL) {
+ struct err_regs *regs = &pvt->ctl_error_info;
+
debugf0("received NBEA= 0x%llx\n", value);
/* place the value into the virtual error packet */
@@ -22,9 +25,12 @@ static ssize_t amd64_nbea_store(struct mem_ctl_info *mci, const char *data,
value >>= 32;
pvt->ctl_error_info.nbeah = (u32) value;
+ m.addr = value;
+ m.status = regs->nbsl | ((u64)regs->nbsh << 32);
+
/* Process the Mapping request */
/* TODO: Add race prevention */
- amd_decode_nb_mce(pvt->mc_node_id, &pvt->ctl_error_info);
+ amd_decode_nb_mce(pvt->mc_node_id, &m, regs->nbcfg);
return count;
}