Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 309131
b: refs/heads/master
c: e17a2f4
h: refs/heads/master
i:
  309129: 729009f
  309127: ff3b8e8
v: v3
  • Loading branch information
Mauro Carvalho Chehab committed May 28, 2012
1 parent f8f959f commit 433a731
Show file tree
Hide file tree
Showing 3 changed files with 21 additions and 32 deletions.
2 changes: 1 addition & 1 deletion [refs]
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
---
refs/heads/master: 5926ff502f6b93ca0c1654f8a5c5317ea236dbdb
refs/heads/master: e17a2f42a484562be48128c5b8dc9f7291e8c902
9 changes: 2 additions & 7 deletions trunk/drivers/edac/i7core_edac.c
Original file line number Diff line number Diff line change
Expand Up @@ -1623,7 +1623,7 @@ static void i7core_mce_output_error(struct mem_ctl_info *mci,
const struct mce *m)
{
struct i7core_pvt *pvt = mci->pvt_info;
char *type, *optype, *err, *msg;
char *type, *optype, *err, msg[80];
enum hw_event_mc_err_type tp_event;
unsigned long error = m->status & 0x1ff0000l;
bool uncorrected_error = m->mcgstatus & 1ll << 61;
Expand Down Expand Up @@ -1701,10 +1701,7 @@ static void i7core_mce_output_error(struct mem_ctl_info *mci,
err = "unknown";
}

msg = kasprintf(GFP_ATOMIC,
"addr=0x%08llx cpu=%d count=%d Err=%08llx:%08llx (%s: %s))\n",
(long long) m->addr, m->cpu, core_err_cnt,
(long long)m->status, (long long)m->misc, optype, err);
snprintf(msg, sizeof(msg), "count=%d %s", core_err_cnt, optype);

/*
* Call the helper to output message
Expand All @@ -1718,8 +1715,6 @@ static void i7core_mce_output_error(struct mem_ctl_info *mci,
syndrome,
channel, dimm, -1,
err, msg, m);

kfree(msg);
}

/*
Expand Down
42 changes: 18 additions & 24 deletions trunk/drivers/edac/sb_edac.c
Original file line number Diff line number Diff line change
Expand Up @@ -788,7 +788,7 @@ static int get_memory_error_data(struct mem_ctl_info *mci,
u8 *socket,
long *channel_mask,
u8 *rank,
char *area_type, char *msg)
char **area_type, char *msg)
{
struct mem_ctl_info *new_mci;
struct sbridge_pvt *pvt = mci->pvt_info;
Expand Down Expand Up @@ -843,7 +843,7 @@ static int get_memory_error_data(struct mem_ctl_info *mci,
sprintf(msg, "Can't discover the memory socket");
return -EINVAL;
}
area_type = get_dram_attr(reg);
*area_type = get_dram_attr(reg);
interleave_mode = INTERLEAVE_MODE(reg);

pci_read_config_dword(pvt->pci_sad0, interleave_list[n_sads],
Expand Down Expand Up @@ -1342,7 +1342,7 @@ static void sbridge_mce_output_error(struct mem_ctl_info *mci,
struct mem_ctl_info *new_mci;
struct sbridge_pvt *pvt = mci->pvt_info;
enum hw_event_mc_err_type tp_event;
char *type, *optype, msg[256], *recoverable_msg;
char *type, *optype, msg[256];
bool ripv = GET_BITFIELD(m->mcgstatus, 0, 0);
bool overflow = GET_BITFIELD(m->status, 62, 62);
bool uncorrected_error = GET_BITFIELD(m->status, 61, 61);
Expand All @@ -1355,7 +1355,7 @@ static void sbridge_mce_output_error(struct mem_ctl_info *mci,
long channel_mask, first_channel;
u8 rank, socket;
int rc, dimm;
char *area_type = "Unknown";
char *area_type = NULL;

if (uncorrected_error) {
if (ripv) {
Expand Down Expand Up @@ -1407,7 +1407,7 @@ static void sbridge_mce_output_error(struct mem_ctl_info *mci,
}

rc = get_memory_error_data(mci, m->addr, &socket,
&channel_mask, &rank, area_type, msg);
&channel_mask, &rank, &area_type, msg);
if (rc < 0)
goto err_parsing;
new_mci = get_mci_for_node_id(socket);
Expand All @@ -1427,29 +1427,23 @@ static void sbridge_mce_output_error(struct mem_ctl_info *mci,
else
dimm = 2;

if (uncorrected_error && recoverable)
recoverable_msg = " recoverable";
else
recoverable_msg = "";

/*
* FIXME: What should we do with "channel" information on mcelog?
* Probably, we can just discard it, as the channel information
* comes from the get_memory_error_data() address decoding
* FIXME: On some memory configurations (mirror, lockstep), the
* Memory Controller can't point the error to a single DIMM. The
* EDAC core should be handling the channel mask, in order to point
* to the group of dimm's where the error may be happening.
*/
snprintf(msg, sizeof(msg),
"%d error(s)%s: %s%s: cpu=%d Err=%04x:%04x addr = 0x%08llx socket=%d Channel=%ld(mask=%ld), rank=%d\n",
core_err_cnt,
overflow ? " OVERFLOW" : "",
area_type,
recoverable_msg,
m->cpu,
mscod, errcode,
(long long) m->addr,
socket,
first_channel, /* This is the real channel on SB */
channel_mask,
rank);
"count:%d%s%s area:%s err_code:%04x:%04x socket:%d channel_mask:%ld rank:%d",
core_err_cnt,
overflow ? " OVERFLOW" : "",
(uncorrected_error && recoverable) ? " recoverable" : "",
area_type,
mscod, errcode,
socket,
channel_mask,
rank);

debugf0("%s", msg);

Expand Down

0 comments on commit 433a731

Please sign in to comment.