diff options
author | Mauro Carvalho Chehab <mchehab@redhat.com> | 2012-06-04 12:27:43 -0400 |
---|---|---|
committer | Mauro Carvalho Chehab <mchehab@redhat.com> | 2012-06-12 11:15:47 -0400 |
commit | 9eb07a7fb8a90ee39fa9d5489afc0330cfcfbea7 (patch) | |
tree | 2d034ec31225f2b82267ab3e081c4e8263e7b85f /drivers | |
parent | 03f7eae80f4b913929be84e0c883ee98196fd6ff (diff) |
edac: edac_mc_handle_error(): add an error_count parameter
In order to avoid loosing error events, it is desirable to group
error events together and generate a single trace for several identical
errors.
The trace API already allows reporting multiple errors. Change the
handle_error function to also allow that.
The changes at the drivers were made by this small script:
$file .=$_ while (<>);
$file =~ s/(edac_mc_handle_error)\s*\(([^\,]+)\,([^\,]+)\,/$1($2,$3, 1,/g;
print $file;
Signed-off-by: Mauro Carvalho Chehab <mchehab@redhat.com>
Diffstat (limited to 'drivers')
28 files changed, 104 insertions, 95 deletions
diff --git a/drivers/edac/amd64_edac.c b/drivers/edac/amd64_edac.c index 6231cbe6e7c1..5a297a26211d 100644 --- a/drivers/edac/amd64_edac.c +++ b/drivers/edac/amd64_edac.c | |||
@@ -1046,7 +1046,7 @@ static void k8_map_sysaddr_to_csrow(struct mem_ctl_info *mci, u64 sys_addr, | |||
1046 | if (!src_mci) { | 1046 | if (!src_mci) { |
1047 | amd64_mc_err(mci, "failed to map error addr 0x%lx to a node\n", | 1047 | amd64_mc_err(mci, "failed to map error addr 0x%lx to a node\n", |
1048 | (unsigned long)sys_addr); | 1048 | (unsigned long)sys_addr); |
1049 | edac_mc_handle_error(HW_EVENT_ERR_CORRECTED, mci, | 1049 | edac_mc_handle_error(HW_EVENT_ERR_CORRECTED, mci, 1, |
1050 | page, offset, syndrome, | 1050 | page, offset, syndrome, |
1051 | -1, -1, -1, | 1051 | -1, -1, -1, |
1052 | "failed to map error addr to a node", | 1052 | "failed to map error addr to a node", |
@@ -1057,7 +1057,7 @@ static void k8_map_sysaddr_to_csrow(struct mem_ctl_info *mci, u64 sys_addr, | |||
1057 | /* Now map the sys_addr to a CSROW */ | 1057 | /* Now map the sys_addr to a CSROW */ |
1058 | csrow = sys_addr_to_csrow(src_mci, sys_addr); | 1058 | csrow = sys_addr_to_csrow(src_mci, sys_addr); |
1059 | if (csrow < 0) { | 1059 | if (csrow < 0) { |
1060 | edac_mc_handle_error(HW_EVENT_ERR_CORRECTED, mci, | 1060 | edac_mc_handle_error(HW_EVENT_ERR_CORRECTED, mci, 1, |
1061 | page, offset, syndrome, | 1061 | page, offset, syndrome, |
1062 | -1, -1, -1, | 1062 | -1, -1, -1, |
1063 | "failed to map error addr to a csrow", | 1063 | "failed to map error addr to a csrow", |
@@ -1077,7 +1077,7 @@ static void k8_map_sysaddr_to_csrow(struct mem_ctl_info *mci, u64 sys_addr, | |||
1077 | amd64_mc_warn(src_mci, "unknown syndrome 0x%04x - " | 1077 | amd64_mc_warn(src_mci, "unknown syndrome 0x%04x - " |
1078 | "possible error reporting race\n", | 1078 | "possible error reporting race\n", |
1079 | syndrome); | 1079 | syndrome); |
1080 | edac_mc_handle_error(HW_EVENT_ERR_CORRECTED, mci, | 1080 | edac_mc_handle_error(HW_EVENT_ERR_CORRECTED, mci, 1, |
1081 | page, offset, syndrome, | 1081 | page, offset, syndrome, |
1082 | csrow, -1, -1, | 1082 | csrow, -1, -1, |
1083 | "unknown syndrome - possible error reporting race", | 1083 | "unknown syndrome - possible error reporting race", |
@@ -1096,7 +1096,7 @@ static void k8_map_sysaddr_to_csrow(struct mem_ctl_info *mci, u64 sys_addr, | |||
1096 | channel = ((sys_addr & BIT(3)) != 0); | 1096 | channel = ((sys_addr & BIT(3)) != 0); |
1097 | } | 1097 | } |
1098 | 1098 | ||
1099 | edac_mc_handle_error(HW_EVENT_ERR_CORRECTED, src_mci, | 1099 | edac_mc_handle_error(HW_EVENT_ERR_CORRECTED, src_mci, 1, |
1100 | page, offset, syndrome, | 1100 | page, offset, syndrome, |
1101 | csrow, channel, -1, | 1101 | csrow, channel, -1, |
1102 | "", ""); | 1102 | "", ""); |
@@ -1608,7 +1608,7 @@ static void f1x_map_sysaddr_to_csrow(struct mem_ctl_info *mci, u64 sys_addr, | |||
1608 | csrow = f1x_translate_sysaddr_to_cs(pvt, sys_addr, &nid, &chan); | 1608 | csrow = f1x_translate_sysaddr_to_cs(pvt, sys_addr, &nid, &chan); |
1609 | 1609 | ||
1610 | if (csrow < 0) { | 1610 | if (csrow < 0) { |
1611 | edac_mc_handle_error(HW_EVENT_ERR_CORRECTED, mci, | 1611 | edac_mc_handle_error(HW_EVENT_ERR_CORRECTED, mci, 1, |
1612 | page, offset, syndrome, | 1612 | page, offset, syndrome, |
1613 | -1, -1, -1, | 1613 | -1, -1, -1, |
1614 | "failed to map error addr to a csrow", | 1614 | "failed to map error addr to a csrow", |
@@ -1624,7 +1624,7 @@ static void f1x_map_sysaddr_to_csrow(struct mem_ctl_info *mci, u64 sys_addr, | |||
1624 | if (dct_ganging_enabled(pvt)) | 1624 | if (dct_ganging_enabled(pvt)) |
1625 | chan = get_channel_from_ecc_syndrome(mci, syndrome); | 1625 | chan = get_channel_from_ecc_syndrome(mci, syndrome); |
1626 | 1626 | ||
1627 | edac_mc_handle_error(HW_EVENT_ERR_CORRECTED, mci, | 1627 | edac_mc_handle_error(HW_EVENT_ERR_CORRECTED, mci, 1, |
1628 | page, offset, syndrome, | 1628 | page, offset, syndrome, |
1629 | csrow, chan, -1, | 1629 | csrow, chan, -1, |
1630 | "", ""); | 1630 | "", ""); |
@@ -1909,7 +1909,7 @@ static void amd64_handle_ce(struct mem_ctl_info *mci, struct mce *m) | |||
1909 | /* Ensure that the Error Address is VALID */ | 1909 | /* Ensure that the Error Address is VALID */ |
1910 | if (!(m->status & MCI_STATUS_ADDRV)) { | 1910 | if (!(m->status & MCI_STATUS_ADDRV)) { |
1911 | amd64_mc_err(mci, "HW has no ERROR_ADDRESS available\n"); | 1911 | amd64_mc_err(mci, "HW has no ERROR_ADDRESS available\n"); |
1912 | edac_mc_handle_error(HW_EVENT_ERR_CORRECTED, mci, | 1912 | edac_mc_handle_error(HW_EVENT_ERR_CORRECTED, mci, 1, |
1913 | 0, 0, 0, | 1913 | 0, 0, 0, |
1914 | -1, -1, -1, | 1914 | -1, -1, -1, |
1915 | "HW has no ERROR_ADDRESS available", | 1915 | "HW has no ERROR_ADDRESS available", |
@@ -1937,7 +1937,7 @@ static void amd64_handle_ue(struct mem_ctl_info *mci, struct mce *m) | |||
1937 | 1937 | ||
1938 | if (!(m->status & MCI_STATUS_ADDRV)) { | 1938 | if (!(m->status & MCI_STATUS_ADDRV)) { |
1939 | amd64_mc_err(mci, "HW has no ERROR_ADDRESS available\n"); | 1939 | amd64_mc_err(mci, "HW has no ERROR_ADDRESS available\n"); |
1940 | edac_mc_handle_error(HW_EVENT_ERR_UNCORRECTED, mci, | 1940 | edac_mc_handle_error(HW_EVENT_ERR_UNCORRECTED, mci, 1, |
1941 | 0, 0, 0, | 1941 | 0, 0, 0, |
1942 | -1, -1, -1, | 1942 | -1, -1, -1, |
1943 | "HW has no ERROR_ADDRESS available", | 1943 | "HW has no ERROR_ADDRESS available", |
@@ -1956,7 +1956,7 @@ static void amd64_handle_ue(struct mem_ctl_info *mci, struct mce *m) | |||
1956 | if (!src_mci) { | 1956 | if (!src_mci) { |
1957 | amd64_mc_err(mci, "ERROR ADDRESS (0x%lx) NOT mapped to a MC\n", | 1957 | amd64_mc_err(mci, "ERROR ADDRESS (0x%lx) NOT mapped to a MC\n", |
1958 | (unsigned long)sys_addr); | 1958 | (unsigned long)sys_addr); |
1959 | edac_mc_handle_error(HW_EVENT_ERR_UNCORRECTED, mci, | 1959 | edac_mc_handle_error(HW_EVENT_ERR_UNCORRECTED, mci, 1, |
1960 | page, offset, 0, | 1960 | page, offset, 0, |
1961 | -1, -1, -1, | 1961 | -1, -1, -1, |
1962 | "ERROR ADDRESS NOT mapped to a MC", | 1962 | "ERROR ADDRESS NOT mapped to a MC", |
@@ -1970,13 +1970,13 @@ static void amd64_handle_ue(struct mem_ctl_info *mci, struct mce *m) | |||
1970 | if (csrow < 0) { | 1970 | if (csrow < 0) { |
1971 | amd64_mc_err(mci, "ERROR_ADDRESS (0x%lx) NOT mapped to CS\n", | 1971 | amd64_mc_err(mci, "ERROR_ADDRESS (0x%lx) NOT mapped to CS\n", |
1972 | (unsigned long)sys_addr); | 1972 | (unsigned long)sys_addr); |
1973 | edac_mc_handle_error(HW_EVENT_ERR_UNCORRECTED, mci, | 1973 | edac_mc_handle_error(HW_EVENT_ERR_UNCORRECTED, mci, 1, |
1974 | page, offset, 0, | 1974 | page, offset, 0, |
1975 | -1, -1, -1, | 1975 | -1, -1, -1, |
1976 | "ERROR ADDRESS NOT mapped to CS", | 1976 | "ERROR ADDRESS NOT mapped to CS", |
1977 | ""); | 1977 | ""); |
1978 | } else { | 1978 | } else { |
1979 | edac_mc_handle_error(HW_EVENT_ERR_UNCORRECTED, mci, | 1979 | edac_mc_handle_error(HW_EVENT_ERR_UNCORRECTED, mci, 1, |
1980 | page, offset, 0, | 1980 | page, offset, 0, |
1981 | csrow, -1, -1, | 1981 | csrow, -1, -1, |
1982 | "", ""); | 1982 | "", ""); |
diff --git a/drivers/edac/amd76x_edac.c b/drivers/edac/amd76x_edac.c index c7c208eae233..29eeb68a200c 100644 --- a/drivers/edac/amd76x_edac.c +++ b/drivers/edac/amd76x_edac.c | |||
@@ -145,7 +145,7 @@ static int amd76x_process_error_info(struct mem_ctl_info *mci, | |||
145 | 145 | ||
146 | if (handle_errors) { | 146 | if (handle_errors) { |
147 | row = (info->ecc_mode_status >> 4) & 0xf; | 147 | row = (info->ecc_mode_status >> 4) & 0xf; |
148 | edac_mc_handle_error(HW_EVENT_ERR_UNCORRECTED, mci, | 148 | edac_mc_handle_error(HW_EVENT_ERR_UNCORRECTED, mci, 1, |
149 | mci->csrows[row]->first_page, 0, 0, | 149 | mci->csrows[row]->first_page, 0, 0, |
150 | row, 0, -1, | 150 | row, 0, -1, |
151 | mci->ctl_name, ""); | 151 | mci->ctl_name, ""); |
@@ -160,7 +160,7 @@ static int amd76x_process_error_info(struct mem_ctl_info *mci, | |||
160 | 160 | ||
161 | if (handle_errors) { | 161 | if (handle_errors) { |
162 | row = info->ecc_mode_status & 0xf; | 162 | row = info->ecc_mode_status & 0xf; |
163 | edac_mc_handle_error(HW_EVENT_ERR_CORRECTED, mci, | 163 | edac_mc_handle_error(HW_EVENT_ERR_CORRECTED, mci, 1, |
164 | mci->csrows[row]->first_page, 0, 0, | 164 | mci->csrows[row]->first_page, 0, 0, |
165 | row, 0, -1, | 165 | row, 0, -1, |
166 | mci->ctl_name, ""); | 166 | mci->ctl_name, ""); |
diff --git a/drivers/edac/cell_edac.c b/drivers/edac/cell_edac.c index 165d255e627d..a1bbd8edd257 100644 --- a/drivers/edac/cell_edac.c +++ b/drivers/edac/cell_edac.c | |||
@@ -48,7 +48,7 @@ static void cell_edac_count_ce(struct mem_ctl_info *mci, int chan, u64 ar) | |||
48 | syndrome = (ar & 0x000000001fe00000ul) >> 21; | 48 | syndrome = (ar & 0x000000001fe00000ul) >> 21; |
49 | 49 | ||
50 | /* TODO: Decoding of the error address */ | 50 | /* TODO: Decoding of the error address */ |
51 | edac_mc_handle_error(HW_EVENT_ERR_CORRECTED, mci, | 51 | edac_mc_handle_error(HW_EVENT_ERR_CORRECTED, mci, 1, |
52 | csrow->first_page + pfn, offset, syndrome, | 52 | csrow->first_page + pfn, offset, syndrome, |
53 | 0, chan, -1, "", ""); | 53 | 0, chan, -1, "", ""); |
54 | } | 54 | } |
@@ -70,7 +70,7 @@ static void cell_edac_count_ue(struct mem_ctl_info *mci, int chan, u64 ar) | |||
70 | offset = address & ~PAGE_MASK; | 70 | offset = address & ~PAGE_MASK; |
71 | 71 | ||
72 | /* TODO: Decoding of the error address */ | 72 | /* TODO: Decoding of the error address */ |
73 | edac_mc_handle_error(HW_EVENT_ERR_UNCORRECTED, mci, | 73 | edac_mc_handle_error(HW_EVENT_ERR_UNCORRECTED, mci, 1, |
74 | csrow->first_page + pfn, offset, 0, | 74 | csrow->first_page + pfn, offset, 0, |
75 | 0, chan, -1, "", ""); | 75 | 0, chan, -1, "", ""); |
76 | } | 76 | } |
diff --git a/drivers/edac/cpc925_edac.c b/drivers/edac/cpc925_edac.c index 32e9c88dbde9..c2ef13495873 100644 --- a/drivers/edac/cpc925_edac.c +++ b/drivers/edac/cpc925_edac.c | |||
@@ -554,7 +554,7 @@ static void cpc925_mc_check(struct mem_ctl_info *mci) | |||
554 | if (apiexcp & CECC_EXCP_DETECTED) { | 554 | if (apiexcp & CECC_EXCP_DETECTED) { |
555 | cpc925_mc_printk(mci, KERN_INFO, "DRAM CECC Fault\n"); | 555 | cpc925_mc_printk(mci, KERN_INFO, "DRAM CECC Fault\n"); |
556 | channel = cpc925_mc_find_channel(mci, syndrome); | 556 | channel = cpc925_mc_find_channel(mci, syndrome); |
557 | edac_mc_handle_error(HW_EVENT_ERR_CORRECTED, mci, | 557 | edac_mc_handle_error(HW_EVENT_ERR_CORRECTED, mci, 1, |
558 | pfn, offset, syndrome, | 558 | pfn, offset, syndrome, |
559 | csrow, channel, -1, | 559 | csrow, channel, -1, |
560 | mci->ctl_name, ""); | 560 | mci->ctl_name, ""); |
@@ -562,7 +562,7 @@ static void cpc925_mc_check(struct mem_ctl_info *mci) | |||
562 | 562 | ||
563 | if (apiexcp & UECC_EXCP_DETECTED) { | 563 | if (apiexcp & UECC_EXCP_DETECTED) { |
564 | cpc925_mc_printk(mci, KERN_INFO, "DRAM UECC Fault\n"); | 564 | cpc925_mc_printk(mci, KERN_INFO, "DRAM UECC Fault\n"); |
565 | edac_mc_handle_error(HW_EVENT_ERR_CORRECTED, mci, | 565 | edac_mc_handle_error(HW_EVENT_ERR_CORRECTED, mci, 1, |
566 | pfn, offset, 0, | 566 | pfn, offset, 0, |
567 | csrow, -1, -1, | 567 | csrow, -1, -1, |
568 | mci->ctl_name, ""); | 568 | mci->ctl_name, ""); |
diff --git a/drivers/edac/e752x_edac.c b/drivers/edac/e752x_edac.c index b5a8bf1292ac..a5ed6b795fd4 100644 --- a/drivers/edac/e752x_edac.c +++ b/drivers/edac/e752x_edac.c | |||
@@ -371,7 +371,7 @@ static void do_process_ce(struct mem_ctl_info *mci, u16 error_one, | |||
371 | channel = !(error_one & 1); | 371 | channel = !(error_one & 1); |
372 | 372 | ||
373 | /* e752x mc reads 34:6 of the DRAM linear address */ | 373 | /* e752x mc reads 34:6 of the DRAM linear address */ |
374 | edac_mc_handle_error(HW_EVENT_ERR_CORRECTED, mci, | 374 | edac_mc_handle_error(HW_EVENT_ERR_CORRECTED, mci, 1, |
375 | page, offset_in_page(sec1_add << 4), sec1_syndrome, | 375 | page, offset_in_page(sec1_add << 4), sec1_syndrome, |
376 | row, channel, -1, | 376 | row, channel, -1, |
377 | "e752x CE", ""); | 377 | "e752x CE", ""); |
@@ -408,7 +408,7 @@ static void do_process_ue(struct mem_ctl_info *mci, u16 error_one, | |||
408 | edac_mc_find_csrow_by_page(mci, block_page); | 408 | edac_mc_find_csrow_by_page(mci, block_page); |
409 | 409 | ||
410 | /* e752x mc reads 34:6 of the DRAM linear address */ | 410 | /* e752x mc reads 34:6 of the DRAM linear address */ |
411 | edac_mc_handle_error(HW_EVENT_ERR_UNCORRECTED, mci, | 411 | edac_mc_handle_error(HW_EVENT_ERR_UNCORRECTED, mci, 1, |
412 | block_page, | 412 | block_page, |
413 | offset_in_page(error_2b << 4), 0, | 413 | offset_in_page(error_2b << 4), 0, |
414 | row, -1, -1, | 414 | row, -1, -1, |
@@ -427,7 +427,7 @@ static void do_process_ue(struct mem_ctl_info *mci, u16 error_one, | |||
427 | edac_mc_find_csrow_by_page(mci, block_page); | 427 | edac_mc_find_csrow_by_page(mci, block_page); |
428 | 428 | ||
429 | /* e752x mc reads 34:6 of the DRAM linear address */ | 429 | /* e752x mc reads 34:6 of the DRAM linear address */ |
430 | edac_mc_handle_error(HW_EVENT_ERR_UNCORRECTED, mci, | 430 | edac_mc_handle_error(HW_EVENT_ERR_UNCORRECTED, mci, 1, |
431 | block_page, | 431 | block_page, |
432 | offset_in_page(error_2b << 4), 0, | 432 | offset_in_page(error_2b << 4), 0, |
433 | row, -1, -1, | 433 | row, -1, -1, |
@@ -454,7 +454,7 @@ static inline void process_ue_no_info_wr(struct mem_ctl_info *mci, | |||
454 | return; | 454 | return; |
455 | 455 | ||
456 | edac_dbg(3, "\n"); | 456 | edac_dbg(3, "\n"); |
457 | edac_mc_handle_error(HW_EVENT_ERR_UNCORRECTED, mci, 0, 0, 0, | 457 | edac_mc_handle_error(HW_EVENT_ERR_UNCORRECTED, mci, 1, 0, 0, 0, |
458 | -1, -1, -1, | 458 | -1, -1, -1, |
459 | "e752x UE log memory write", ""); | 459 | "e752x UE log memory write", ""); |
460 | } | 460 | } |
diff --git a/drivers/edac/e7xxx_edac.c b/drivers/edac/e7xxx_edac.c index c26b69e70039..9ff57f361a43 100644 --- a/drivers/edac/e7xxx_edac.c +++ b/drivers/edac/e7xxx_edac.c | |||
@@ -219,14 +219,14 @@ static void process_ce(struct mem_ctl_info *mci, struct e7xxx_error_info *info) | |||
219 | row = edac_mc_find_csrow_by_page(mci, page); | 219 | row = edac_mc_find_csrow_by_page(mci, page); |
220 | /* convert syndrome to channel */ | 220 | /* convert syndrome to channel */ |
221 | channel = e7xxx_find_channel(syndrome); | 221 | channel = e7xxx_find_channel(syndrome); |
222 | edac_mc_handle_error(HW_EVENT_ERR_CORRECTED, mci, page, 0, syndrome, | 222 | edac_mc_handle_error(HW_EVENT_ERR_CORRECTED, mci, 1, page, 0, syndrome, |
223 | row, channel, -1, "e7xxx CE", ""); | 223 | row, channel, -1, "e7xxx CE", ""); |
224 | } | 224 | } |
225 | 225 | ||
226 | static void process_ce_no_info(struct mem_ctl_info *mci) | 226 | static void process_ce_no_info(struct mem_ctl_info *mci) |
227 | { | 227 | { |
228 | edac_dbg(3, "\n"); | 228 | edac_dbg(3, "\n"); |
229 | edac_mc_handle_error(HW_EVENT_ERR_UNCORRECTED, mci, 0, 0, 0, -1, -1, -1, | 229 | edac_mc_handle_error(HW_EVENT_ERR_UNCORRECTED, mci, 1, 0, 0, 0, -1, -1, -1, |
230 | "e7xxx CE log register overflow", ""); | 230 | "e7xxx CE log register overflow", ""); |
231 | } | 231 | } |
232 | 232 | ||
@@ -242,7 +242,7 @@ static void process_ue(struct mem_ctl_info *mci, struct e7xxx_error_info *info) | |||
242 | block_page = error_2b >> 6; /* convert to 4k address */ | 242 | block_page = error_2b >> 6; /* convert to 4k address */ |
243 | row = edac_mc_find_csrow_by_page(mci, block_page); | 243 | row = edac_mc_find_csrow_by_page(mci, block_page); |
244 | 244 | ||
245 | edac_mc_handle_error(HW_EVENT_ERR_UNCORRECTED, mci, block_page, 0, 0, | 245 | edac_mc_handle_error(HW_EVENT_ERR_UNCORRECTED, mci, 1, block_page, 0, 0, |
246 | row, -1, -1, "e7xxx UE", ""); | 246 | row, -1, -1, "e7xxx UE", ""); |
247 | } | 247 | } |
248 | 248 | ||
@@ -250,7 +250,7 @@ static void process_ue_no_info(struct mem_ctl_info *mci) | |||
250 | { | 250 | { |
251 | edac_dbg(3, "\n"); | 251 | edac_dbg(3, "\n"); |
252 | 252 | ||
253 | edac_mc_handle_error(HW_EVENT_ERR_UNCORRECTED, mci, 0, 0, 0, -1, -1, -1, | 253 | edac_mc_handle_error(HW_EVENT_ERR_UNCORRECTED, mci, 1, 0, 0, 0, -1, -1, -1, |
254 | "e7xxx UE log register overflow", ""); | 254 | "e7xxx UE log register overflow", ""); |
255 | } | 255 | } |
256 | 256 | ||
diff --git a/drivers/edac/edac_core.h b/drivers/edac/edac_core.h index 500ba6698986..3843222e5b9f 100644 --- a/drivers/edac/edac_core.h +++ b/drivers/edac/edac_core.h | |||
@@ -455,6 +455,7 @@ extern int edac_mc_find_csrow_by_page(struct mem_ctl_info *mci, | |||
455 | unsigned long page); | 455 | unsigned long page); |
456 | void edac_mc_handle_error(const enum hw_event_mc_err_type type, | 456 | void edac_mc_handle_error(const enum hw_event_mc_err_type type, |
457 | struct mem_ctl_info *mci, | 457 | struct mem_ctl_info *mci, |
458 | const u16 error_count, | ||
458 | const unsigned long page_frame_number, | 459 | const unsigned long page_frame_number, |
459 | const unsigned long offset_in_page, | 460 | const unsigned long offset_in_page, |
460 | const unsigned long syndrome, | 461 | const unsigned long syndrome, |
diff --git a/drivers/edac/edac_mc.c b/drivers/edac/edac_mc.c index fb41e38c6891..8d59378f839c 100644 --- a/drivers/edac/edac_mc.c +++ b/drivers/edac/edac_mc.c | |||
@@ -897,15 +897,16 @@ const char *edac_layer_name[] = { | |||
897 | EXPORT_SYMBOL_GPL(edac_layer_name); | 897 | EXPORT_SYMBOL_GPL(edac_layer_name); |
898 | 898 | ||
899 | static void edac_inc_ce_error(struct mem_ctl_info *mci, | 899 | static void edac_inc_ce_error(struct mem_ctl_info *mci, |
900 | bool enable_per_layer_report, | 900 | bool enable_per_layer_report, |
901 | const int pos[EDAC_MAX_LAYERS]) | 901 | const int pos[EDAC_MAX_LAYERS], |
902 | const u16 count) | ||
902 | { | 903 | { |
903 | int i, index = 0; | 904 | int i, index = 0; |
904 | 905 | ||
905 | mci->ce_mc++; | 906 | mci->ce_mc += count; |
906 | 907 | ||
907 | if (!enable_per_layer_report) { | 908 | if (!enable_per_layer_report) { |
908 | mci->ce_noinfo_count++; | 909 | mci->ce_noinfo_count += count; |
909 | return; | 910 | return; |
910 | } | 911 | } |
911 | 912 | ||
@@ -913,7 +914,7 @@ static void edac_inc_ce_error(struct mem_ctl_info *mci, | |||
913 | if (pos[i] < 0) | 914 | if (pos[i] < 0) |
914 | break; | 915 | break; |
915 | index += pos[i]; | 916 | index += pos[i]; |
916 | mci->ce_per_layer[i][index]++; | 917 | mci->ce_per_layer[i][index] += count; |
917 | 918 | ||
918 | if (i < mci->n_layers - 1) | 919 | if (i < mci->n_layers - 1) |
919 | index *= mci->layers[i + 1].size; | 920 | index *= mci->layers[i + 1].size; |
@@ -922,14 +923,15 @@ static void edac_inc_ce_error(struct mem_ctl_info *mci, | |||
922 | 923 | ||
923 | static void edac_inc_ue_error(struct mem_ctl_info *mci, | 924 | static void edac_inc_ue_error(struct mem_ctl_info *mci, |
924 | bool enable_per_layer_report, | 925 | bool enable_per_layer_report, |
925 | const int pos[EDAC_MAX_LAYERS]) | 926 | const int pos[EDAC_MAX_LAYERS], |
927 | const u16 count) | ||
926 | { | 928 | { |
927 | int i, index = 0; | 929 | int i, index = 0; |
928 | 930 | ||
929 | mci->ue_mc++; | 931 | mci->ue_mc += count; |
930 | 932 | ||
931 | if (!enable_per_layer_report) { | 933 | if (!enable_per_layer_report) { |
932 | mci->ce_noinfo_count++; | 934 | mci->ce_noinfo_count += count; |
933 | return; | 935 | return; |
934 | } | 936 | } |
935 | 937 | ||
@@ -937,7 +939,7 @@ static void edac_inc_ue_error(struct mem_ctl_info *mci, | |||
937 | if (pos[i] < 0) | 939 | if (pos[i] < 0) |
938 | break; | 940 | break; |
939 | index += pos[i]; | 941 | index += pos[i]; |
940 | mci->ue_per_layer[i][index]++; | 942 | mci->ue_per_layer[i][index] += count; |
941 | 943 | ||
942 | if (i < mci->n_layers - 1) | 944 | if (i < mci->n_layers - 1) |
943 | index *= mci->layers[i + 1].size; | 945 | index *= mci->layers[i + 1].size; |
@@ -945,6 +947,7 @@ static void edac_inc_ue_error(struct mem_ctl_info *mci, | |||
945 | } | 947 | } |
946 | 948 | ||
947 | static void edac_ce_error(struct mem_ctl_info *mci, | 949 | static void edac_ce_error(struct mem_ctl_info *mci, |
950 | const u16 error_count, | ||
948 | const int pos[EDAC_MAX_LAYERS], | 951 | const int pos[EDAC_MAX_LAYERS], |
949 | const char *msg, | 952 | const char *msg, |
950 | const char *location, | 953 | const char *location, |
@@ -961,16 +964,18 @@ static void edac_ce_error(struct mem_ctl_info *mci, | |||
961 | if (edac_mc_get_log_ce()) { | 964 | if (edac_mc_get_log_ce()) { |
962 | if (other_detail && *other_detail) | 965 | if (other_detail && *other_detail) |
963 | edac_mc_printk(mci, KERN_WARNING, | 966 | edac_mc_printk(mci, KERN_WARNING, |
964 | "CE %s on %s (%s %s - %s)\n", | 967 | "%d CE %s on %s (%s %s - %s)\n", |
968 | error_count, | ||
965 | msg, label, location, | 969 | msg, label, location, |
966 | detail, other_detail); | 970 | detail, other_detail); |
967 | else | 971 | else |
968 | edac_mc_printk(mci, KERN_WARNING, | 972 | edac_mc_printk(mci, KERN_WARNING, |
969 | "CE %s on %s (%s %s)\n", | 973 | "%d CE %s on %s (%s %s)\n", |
974 | error_count, | ||
970 | msg, label, location, | 975 | msg, label, location, |
971 | detail); | 976 | detail); |
972 | } | 977 | } |
973 | edac_inc_ce_error(mci, enable_per_layer_report, pos); | 978 | edac_inc_ce_error(mci, enable_per_layer_report, pos, error_count); |
974 | 979 | ||
975 | if (mci->scrub_mode & SCRUB_SW_SRC) { | 980 | if (mci->scrub_mode & SCRUB_SW_SRC) { |
976 | /* | 981 | /* |
@@ -994,6 +999,7 @@ static void edac_ce_error(struct mem_ctl_info *mci, | |||
994 | } | 999 | } |
995 | 1000 | ||
996 | static void edac_ue_error(struct mem_ctl_info *mci, | 1001 | static void edac_ue_error(struct mem_ctl_info *mci, |
1002 | const u16 error_count, | ||
997 | const int pos[EDAC_MAX_LAYERS], | 1003 | const int pos[EDAC_MAX_LAYERS], |
998 | const char *msg, | 1004 | const char *msg, |
999 | const char *location, | 1005 | const char *location, |
@@ -1005,12 +1011,14 @@ static void edac_ue_error(struct mem_ctl_info *mci, | |||
1005 | if (edac_mc_get_log_ue()) { | 1011 | if (edac_mc_get_log_ue()) { |
1006 | if (other_detail && *other_detail) | 1012 | if (other_detail && *other_detail) |
1007 | edac_mc_printk(mci, KERN_WARNING, | 1013 | edac_mc_printk(mci, KERN_WARNING, |
1008 | "UE %s on %s (%s %s - %s)\n", | 1014 | "%d UE %s on %s (%s %s - %s)\n", |
1015 | error_count, | ||
1009 | msg, label, location, detail, | 1016 | msg, label, location, detail, |
1010 | other_detail); | 1017 | other_detail); |
1011 | else | 1018 | else |
1012 | edac_mc_printk(mci, KERN_WARNING, | 1019 | edac_mc_printk(mci, KERN_WARNING, |
1013 | "UE %s on %s (%s %s)\n", | 1020 | "%d UE %s on %s (%s %s)\n", |
1021 | error_count, | ||
1014 | msg, label, location, detail); | 1022 | msg, label, location, detail); |
1015 | } | 1023 | } |
1016 | 1024 | ||
@@ -1023,7 +1031,7 @@ static void edac_ue_error(struct mem_ctl_info *mci, | |||
1023 | msg, label, location, detail); | 1031 | msg, label, location, detail); |
1024 | } | 1032 | } |
1025 | 1033 | ||
1026 | edac_inc_ue_error(mci, enable_per_layer_report, pos); | 1034 | edac_inc_ue_error(mci, enable_per_layer_report, pos, error_count); |
1027 | } | 1035 | } |
1028 | 1036 | ||
1029 | #define OTHER_LABEL " or " | 1037 | #define OTHER_LABEL " or " |
@@ -1033,6 +1041,7 @@ static void edac_ue_error(struct mem_ctl_info *mci, | |||
1033 | * | 1041 | * |
1034 | * @type: severity of the error (CE/UE/Fatal) | 1042 | * @type: severity of the error (CE/UE/Fatal) |
1035 | * @mci: a struct mem_ctl_info pointer | 1043 | * @mci: a struct mem_ctl_info pointer |
1044 | * @error_count: Number of errors of the same type | ||
1036 | * @page_frame_number: mem page where the error occurred | 1045 | * @page_frame_number: mem page where the error occurred |
1037 | * @offset_in_page: offset of the error inside the page | 1046 | * @offset_in_page: offset of the error inside the page |
1038 | * @syndrome: ECC syndrome | 1047 | * @syndrome: ECC syndrome |
@@ -1047,6 +1056,7 @@ static void edac_ue_error(struct mem_ctl_info *mci, | |||
1047 | */ | 1056 | */ |
1048 | void edac_mc_handle_error(const enum hw_event_mc_err_type type, | 1057 | void edac_mc_handle_error(const enum hw_event_mc_err_type type, |
1049 | struct mem_ctl_info *mci, | 1058 | struct mem_ctl_info *mci, |
1059 | const u16 error_count, | ||
1050 | const unsigned long page_frame_number, | 1060 | const unsigned long page_frame_number, |
1051 | const unsigned long offset_in_page, | 1061 | const unsigned long offset_in_page, |
1052 | const unsigned long syndrome, | 1062 | const unsigned long syndrome, |
@@ -1065,7 +1075,6 @@ void edac_mc_handle_error(const enum hw_event_mc_err_type type, | |||
1065 | int i; | 1075 | int i; |
1066 | long grain; | 1076 | long grain; |
1067 | bool enable_per_layer_report = false; | 1077 | bool enable_per_layer_report = false; |
1068 | u16 error_count; /* FIXME: make it a parameter */ | ||
1069 | u8 grain_bits; | 1078 | u8 grain_bits; |
1070 | 1079 | ||
1071 | edac_dbg(3, "MC%d\n", mci->mc_idx); | 1080 | edac_dbg(3, "MC%d\n", mci->mc_idx); |
@@ -1169,13 +1178,13 @@ void edac_mc_handle_error(const enum hw_event_mc_err_type type, | |||
1169 | strcpy(label, "unknown memory"); | 1178 | strcpy(label, "unknown memory"); |
1170 | if (type == HW_EVENT_ERR_CORRECTED) { | 1179 | if (type == HW_EVENT_ERR_CORRECTED) { |
1171 | if (row >= 0) { | 1180 | if (row >= 0) { |
1172 | mci->csrows[row]->ce_count++; | 1181 | mci->csrows[row]->ce_count += error_count; |
1173 | if (chan >= 0) | 1182 | if (chan >= 0) |
1174 | mci->csrows[row]->channels[chan]->ce_count++; | 1183 | mci->csrows[row]->channels[chan]->ce_count += error_count; |
1175 | } | 1184 | } |
1176 | } else | 1185 | } else |
1177 | if (row >= 0) | 1186 | if (row >= 0) |
1178 | mci->csrows[row]->ue_count++; | 1187 | mci->csrows[row]->ue_count += error_count; |
1179 | } | 1188 | } |
1180 | 1189 | ||
1181 | /* Fill the RAM location data */ | 1190 | /* Fill the RAM location data */ |
@@ -1193,7 +1202,6 @@ void edac_mc_handle_error(const enum hw_event_mc_err_type type, | |||
1193 | 1202 | ||
1194 | /* Report the error via the trace interface */ | 1203 | /* Report the error via the trace interface */ |
1195 | 1204 | ||
1196 | error_count = 1; /* FIXME: allow change it */ | ||
1197 | grain_bits = fls_long(grain) + 1; | 1205 | grain_bits = fls_long(grain) + 1; |
1198 | trace_mc_event(type, msg, label, error_count, | 1206 | trace_mc_event(type, msg, label, error_count, |
1199 | mci->mc_idx, top_layer, mid_layer, low_layer, | 1207 | mci->mc_idx, top_layer, mid_layer, low_layer, |
@@ -1206,16 +1214,16 @@ void edac_mc_handle_error(const enum hw_event_mc_err_type type, | |||
1206 | "page:0x%lx offset:0x%lx grain:%ld syndrome:0x%lx", | 1214 | "page:0x%lx offset:0x%lx grain:%ld syndrome:0x%lx", |
1207 | page_frame_number, offset_in_page, | 1215 | page_frame_number, offset_in_page, |
1208 | grain, syndrome); | 1216 | grain, syndrome); |
1209 | edac_ce_error(mci, pos, msg, location, label, detail, | 1217 | edac_ce_error(mci, error_count, pos, msg, location, label, |
1210 | other_detail, enable_per_layer_report, | 1218 | detail, other_detail, enable_per_layer_report, |
1211 | page_frame_number, offset_in_page, grain); | 1219 | page_frame_number, offset_in_page, grain); |
1212 | } else { | 1220 | } else { |
1213 | snprintf(detail, sizeof(detail), | 1221 | snprintf(detail, sizeof(detail), |
1214 | "page:0x%lx offset:0x%lx grain:%ld", | 1222 | "page:0x%lx offset:0x%lx grain:%ld", |
1215 | page_frame_number, offset_in_page, grain); | 1223 | page_frame_number, offset_in_page, grain); |
1216 | 1224 | ||
1217 | edac_ue_error(mci, pos, msg, location, label, detail, | 1225 | edac_ue_error(mci, error_count, pos, msg, location, label, |
1218 | other_detail, enable_per_layer_report); | 1226 | detail, other_detail, enable_per_layer_report); |
1219 | } | 1227 | } |
1220 | } | 1228 | } |
1221 | EXPORT_SYMBOL_GPL(edac_mc_handle_error); | 1229 | EXPORT_SYMBOL_GPL(edac_mc_handle_error); |
diff --git a/drivers/edac/edac_mc_sysfs.c b/drivers/edac/edac_mc_sysfs.c index 107e7a71678e..55b2f0a18d22 100644 --- a/drivers/edac/edac_mc_sysfs.c +++ b/drivers/edac/edac_mc_sysfs.c | |||
@@ -823,7 +823,7 @@ static ssize_t edac_fake_inject_write(struct file *file, | |||
823 | mci->fake_inject_layer[1], | 823 | mci->fake_inject_layer[1], |
824 | mci->fake_inject_layer[2] | 824 | mci->fake_inject_layer[2] |
825 | ); | 825 | ); |
826 | edac_mc_handle_error(type, mci, 0, 0, 0, | 826 | edac_mc_handle_error(type, mci, 1, 0, 0, 0, |
827 | mci->fake_inject_layer[0], | 827 | mci->fake_inject_layer[0], |
828 | mci->fake_inject_layer[1], | 828 | mci->fake_inject_layer[1], |
829 | mci->fake_inject_layer[2], | 829 | mci->fake_inject_layer[2], |
diff --git a/drivers/edac/i3000_edac.c b/drivers/edac/i3000_edac.c index dd07bea34078..d3d19cc4e9a1 100644 --- a/drivers/edac/i3000_edac.c +++ b/drivers/edac/i3000_edac.c | |||
@@ -245,7 +245,7 @@ static int i3000_process_error_info(struct mem_ctl_info *mci, | |||
245 | return 1; | 245 | return 1; |
246 | 246 | ||
247 | if ((info->errsts ^ info->errsts2) & I3000_ERRSTS_BITS) { | 247 | if ((info->errsts ^ info->errsts2) & I3000_ERRSTS_BITS) { |
248 | edac_mc_handle_error(HW_EVENT_ERR_UNCORRECTED, mci, 0, 0, 0, | 248 | edac_mc_handle_error(HW_EVENT_ERR_UNCORRECTED, mci, 1, 0, 0, 0, |
249 | -1, -1, -1, | 249 | -1, -1, -1, |
250 | "UE overwrote CE", ""); | 250 | "UE overwrote CE", ""); |
251 | info->errsts = info->errsts2; | 251 | info->errsts = info->errsts2; |
@@ -258,12 +258,12 @@ static int i3000_process_error_info(struct mem_ctl_info *mci, | |||
258 | row = edac_mc_find_csrow_by_page(mci, pfn); | 258 | row = edac_mc_find_csrow_by_page(mci, pfn); |
259 | 259 | ||
260 | if (info->errsts & I3000_ERRSTS_UE) | 260 | if (info->errsts & I3000_ERRSTS_UE) |
261 | edac_mc_handle_error(HW_EVENT_ERR_UNCORRECTED, mci, | 261 | edac_mc_handle_error(HW_EVENT_ERR_UNCORRECTED, mci, 1, |
262 | pfn, offset, 0, | 262 | pfn, offset, 0, |
263 | row, -1, -1, | 263 | row, -1, -1, |
264 | "i3000 UE", ""); | 264 | "i3000 UE", ""); |
265 | else | 265 | else |
266 | edac_mc_handle_error(HW_EVENT_ERR_CORRECTED, mci, | 266 | edac_mc_handle_error(HW_EVENT_ERR_CORRECTED, mci, 1, |
267 | pfn, offset, info->derrsyn, | 267 | pfn, offset, info->derrsyn, |
268 | row, multi_chan ? channel : 0, -1, | 268 | row, multi_chan ? channel : 0, -1, |
269 | "i3000 CE", ""); | 269 | "i3000 CE", ""); |
diff --git a/drivers/edac/i3200_edac.c b/drivers/edac/i3200_edac.c index 07ae4426b5df..47180a08edad 100644 --- a/drivers/edac/i3200_edac.c +++ b/drivers/edac/i3200_edac.c | |||
@@ -218,7 +218,7 @@ static void i3200_process_error_info(struct mem_ctl_info *mci, | |||
218 | return; | 218 | return; |
219 | 219 | ||
220 | if ((info->errsts ^ info->errsts2) & I3200_ERRSTS_BITS) { | 220 | if ((info->errsts ^ info->errsts2) & I3200_ERRSTS_BITS) { |
221 | edac_mc_handle_error(HW_EVENT_ERR_UNCORRECTED, mci, 0, 0, 0, | 221 | edac_mc_handle_error(HW_EVENT_ERR_UNCORRECTED, mci, 1, 0, 0, 0, |
222 | -1, -1, -1, "UE overwrote CE", ""); | 222 | -1, -1, -1, "UE overwrote CE", ""); |
223 | info->errsts = info->errsts2; | 223 | info->errsts = info->errsts2; |
224 | } | 224 | } |
@@ -226,13 +226,13 @@ static void i3200_process_error_info(struct mem_ctl_info *mci, | |||
226 | for (channel = 0; channel < nr_channels; channel++) { | 226 | for (channel = 0; channel < nr_channels; channel++) { |
227 | log = info->eccerrlog[channel]; | 227 | log = info->eccerrlog[channel]; |
228 | if (log & I3200_ECCERRLOG_UE) { | 228 | if (log & I3200_ECCERRLOG_UE) { |
229 | edac_mc_handle_error(HW_EVENT_ERR_UNCORRECTED, mci, | 229 | edac_mc_handle_error(HW_EVENT_ERR_UNCORRECTED, mci, 1, |
230 | 0, 0, 0, | 230 | 0, 0, 0, |
231 | eccerrlog_row(channel, log), | 231 | eccerrlog_row(channel, log), |
232 | -1, -1, | 232 | -1, -1, |
233 | "i3000 UE", ""); | 233 | "i3000 UE", ""); |
234 | } else if (log & I3200_ECCERRLOG_CE) { | 234 | } else if (log & I3200_ECCERRLOG_CE) { |
235 | edac_mc_handle_error(HW_EVENT_ERR_UNCORRECTED, mci, | 235 | edac_mc_handle_error(HW_EVENT_ERR_UNCORRECTED, mci, 1, |
236 | 0, 0, eccerrlog_syndrome(log), | 236 | 0, 0, eccerrlog_syndrome(log), |
237 | eccerrlog_row(channel, log), | 237 | eccerrlog_row(channel, log), |
238 | -1, -1, | 238 | -1, -1, |
diff --git a/drivers/edac/i5000_edac.c b/drivers/edac/i5000_edac.c index 0406f0d4dd2f..a5c33df520ac 100644 --- a/drivers/edac/i5000_edac.c +++ b/drivers/edac/i5000_edac.c | |||
@@ -519,7 +519,7 @@ static void i5000_process_fatal_error_info(struct mem_ctl_info *mci, | |||
519 | bank, ras, cas, allErrors, specific); | 519 | bank, ras, cas, allErrors, specific); |
520 | 520 | ||
521 | /* Call the helper to output message */ | 521 | /* Call the helper to output message */ |
522 | edac_mc_handle_error(HW_EVENT_ERR_FATAL, mci, 0, 0, 0, | 522 | edac_mc_handle_error(HW_EVENT_ERR_FATAL, mci, 1, 0, 0, 0, |
523 | channel >> 1, channel & 1, rank, | 523 | channel >> 1, channel & 1, rank, |
524 | rdwr ? "Write error" : "Read error", | 524 | rdwr ? "Write error" : "Read error", |
525 | msg); | 525 | msg); |
@@ -618,7 +618,7 @@ static void i5000_process_nonfatal_error_info(struct mem_ctl_info *mci, | |||
618 | rank, bank, ras, cas, ue_errors, specific); | 618 | rank, bank, ras, cas, ue_errors, specific); |
619 | 619 | ||
620 | /* Call the helper to output message */ | 620 | /* Call the helper to output message */ |
621 | edac_mc_handle_error(HW_EVENT_ERR_UNCORRECTED, mci, 0, 0, 0, | 621 | edac_mc_handle_error(HW_EVENT_ERR_UNCORRECTED, mci, 1, 0, 0, 0, |
622 | channel >> 1, -1, rank, | 622 | channel >> 1, -1, rank, |
623 | rdwr ? "Write error" : "Read error", | 623 | rdwr ? "Write error" : "Read error", |
624 | msg); | 624 | msg); |
@@ -672,7 +672,7 @@ static void i5000_process_nonfatal_error_info(struct mem_ctl_info *mci, | |||
672 | specific); | 672 | specific); |
673 | 673 | ||
674 | /* Call the helper to output message */ | 674 | /* Call the helper to output message */ |
675 | edac_mc_handle_error(HW_EVENT_ERR_CORRECTED, mci, 0, 0, 0, | 675 | edac_mc_handle_error(HW_EVENT_ERR_CORRECTED, mci, 1, 0, 0, 0, |
676 | channel >> 1, channel % 2, rank, | 676 | channel >> 1, channel % 2, rank, |
677 | rdwr ? "Write error" : "Read error", | 677 | rdwr ? "Write error" : "Read error", |
678 | msg); | 678 | msg); |
@@ -718,7 +718,7 @@ static void i5000_process_nonfatal_error_info(struct mem_ctl_info *mci, | |||
718 | "Err=%#x (%s)", misc_errors, specific); | 718 | "Err=%#x (%s)", misc_errors, specific); |
719 | 719 | ||
720 | /* Call the helper to output message */ | 720 | /* Call the helper to output message */ |
721 | edac_mc_handle_error(HW_EVENT_ERR_CORRECTED, mci, 0, 0, 0, | 721 | edac_mc_handle_error(HW_EVENT_ERR_CORRECTED, mci, 1, 0, 0, 0, |
722 | branch >> 1, -1, -1, | 722 | branch >> 1, -1, -1, |
723 | "Misc error", msg); | 723 | "Misc error", msg); |
724 | } | 724 | } |
diff --git a/drivers/edac/i5100_edac.c b/drivers/edac/i5100_edac.c index 1e5c8f668652..c4b5e5f868e8 100644 --- a/drivers/edac/i5100_edac.c +++ b/drivers/edac/i5100_edac.c | |||
@@ -431,7 +431,7 @@ static void i5100_handle_ce(struct mem_ctl_info *mci, | |||
431 | "bank %u, cas %u, ras %u\n", | 431 | "bank %u, cas %u, ras %u\n", |
432 | bank, cas, ras); | 432 | bank, cas, ras); |
433 | 433 | ||
434 | edac_mc_handle_error(HW_EVENT_ERR_CORRECTED, mci, | 434 | edac_mc_handle_error(HW_EVENT_ERR_CORRECTED, mci, 1, |
435 | 0, 0, syndrome, | 435 | 0, 0, syndrome, |
436 | chan, rank, -1, | 436 | chan, rank, -1, |
437 | msg, detail); | 437 | msg, detail); |
@@ -453,7 +453,7 @@ static void i5100_handle_ue(struct mem_ctl_info *mci, | |||
453 | "bank %u, cas %u, ras %u\n", | 453 | "bank %u, cas %u, ras %u\n", |
454 | bank, cas, ras); | 454 | bank, cas, ras); |
455 | 455 | ||
456 | edac_mc_handle_error(HW_EVENT_ERR_UNCORRECTED, mci, | 456 | edac_mc_handle_error(HW_EVENT_ERR_UNCORRECTED, mci, 1, |
457 | 0, 0, syndrome, | 457 | 0, 0, syndrome, |
458 | chan, rank, -1, | 458 | chan, rank, -1, |
459 | msg, detail); | 459 | msg, detail); |
diff --git a/drivers/edac/i5400_edac.c b/drivers/edac/i5400_edac.c index f2bfc2660158..50069c62c8d4 100644 --- a/drivers/edac/i5400_edac.c +++ b/drivers/edac/i5400_edac.c | |||
@@ -554,7 +554,7 @@ static void i5400_proccess_non_recoverable_info(struct mem_ctl_info *mci, | |||
554 | "Bank=%d Buffer ID = %d RAS=%d CAS=%d Err=0x%lx (%s)", | 554 | "Bank=%d Buffer ID = %d RAS=%d CAS=%d Err=0x%lx (%s)", |
555 | bank, buf_id, ras, cas, allErrors, error_name[errnum]); | 555 | bank, buf_id, ras, cas, allErrors, error_name[errnum]); |
556 | 556 | ||
557 | edac_mc_handle_error(tp_event, mci, 0, 0, 0, | 557 | edac_mc_handle_error(tp_event, mci, 1, 0, 0, 0, |
558 | branch >> 1, -1, rank, | 558 | branch >> 1, -1, rank, |
559 | rdwr ? "Write error" : "Read error", | 559 | rdwr ? "Write error" : "Read error", |
560 | msg); | 560 | msg); |
@@ -626,7 +626,7 @@ static void i5400_process_nonfatal_error_info(struct mem_ctl_info *mci, | |||
626 | branch >> 1, bank, rdwr_str(rdwr), ras, cas, | 626 | branch >> 1, bank, rdwr_str(rdwr), ras, cas, |
627 | allErrors, error_name[errnum]); | 627 | allErrors, error_name[errnum]); |
628 | 628 | ||
629 | edac_mc_handle_error(HW_EVENT_ERR_CORRECTED, mci, 0, 0, 0, | 629 | edac_mc_handle_error(HW_EVENT_ERR_CORRECTED, mci, 1, 0, 0, 0, |
630 | branch >> 1, channel % 2, rank, | 630 | branch >> 1, channel % 2, rank, |
631 | rdwr ? "Write error" : "Read error", | 631 | rdwr ? "Write error" : "Read error", |
632 | msg); | 632 | msg); |
diff --git a/drivers/edac/i7300_edac.c b/drivers/edac/i7300_edac.c index 4a8835fd12bd..a09d0667f72a 100644 --- a/drivers/edac/i7300_edac.c +++ b/drivers/edac/i7300_edac.c | |||
@@ -449,7 +449,7 @@ static void i7300_process_fbd_error(struct mem_ctl_info *mci) | |||
449 | "Bank=%d RAS=%d CAS=%d Err=0x%lx (%s))", | 449 | "Bank=%d RAS=%d CAS=%d Err=0x%lx (%s))", |
450 | bank, ras, cas, errors, specific); | 450 | bank, ras, cas, errors, specific); |
451 | 451 | ||
452 | edac_mc_handle_error(HW_EVENT_ERR_FATAL, mci, 0, 0, 0, | 452 | edac_mc_handle_error(HW_EVENT_ERR_FATAL, mci, 1, 0, 0, 0, |
453 | branch, -1, rank, | 453 | branch, -1, rank, |
454 | is_wr ? "Write error" : "Read error", | 454 | is_wr ? "Write error" : "Read error", |
455 | pvt->tmp_prt_buffer); | 455 | pvt->tmp_prt_buffer); |
@@ -495,7 +495,7 @@ static void i7300_process_fbd_error(struct mem_ctl_info *mci) | |||
495 | "DRAM-Bank=%d RAS=%d CAS=%d, Err=0x%lx (%s))", | 495 | "DRAM-Bank=%d RAS=%d CAS=%d, Err=0x%lx (%s))", |
496 | bank, ras, cas, errors, specific); | 496 | bank, ras, cas, errors, specific); |
497 | 497 | ||
498 | edac_mc_handle_error(HW_EVENT_ERR_CORRECTED, mci, 0, 0, | 498 | edac_mc_handle_error(HW_EVENT_ERR_CORRECTED, mci, 1, 0, 0, |
499 | syndrome, | 499 | syndrome, |
500 | branch >> 1, channel % 2, rank, | 500 | branch >> 1, channel % 2, rank, |
501 | is_wr ? "Write error" : "Read error", | 501 | is_wr ? "Write error" : "Read error", |
diff --git a/drivers/edac/i7core_edac.c b/drivers/edac/i7core_edac.c index aba8d5190330..a95686e22416 100644 --- a/drivers/edac/i7core_edac.c +++ b/drivers/edac/i7core_edac.c | |||
@@ -1544,7 +1544,7 @@ static void i7core_rdimm_update_errcount(struct mem_ctl_info *mci, | |||
1544 | int i; | 1544 | int i; |
1545 | 1545 | ||
1546 | for (i = 0; i < add; i++) { | 1546 | for (i = 0; i < add; i++) { |
1547 | edac_mc_handle_error(HW_EVENT_ERR_CORRECTED, mci, 0, 0, 0, | 1547 | edac_mc_handle_error(HW_EVENT_ERR_CORRECTED, mci, 1, 0, 0, 0, |
1548 | chan, dimm, -1, "error", ""); | 1548 | chan, dimm, -1, "error", ""); |
1549 | } | 1549 | } |
1550 | } | 1550 | } |
@@ -1796,7 +1796,7 @@ static void i7core_mce_output_error(struct mem_ctl_info *mci, | |||
1796 | * only one event | 1796 | * only one event |
1797 | */ | 1797 | */ |
1798 | if (uncorrected_error || !pvt->is_registered) | 1798 | if (uncorrected_error || !pvt->is_registered) |
1799 | edac_mc_handle_error(tp_event, mci, | 1799 | edac_mc_handle_error(tp_event, mci, 1, |
1800 | m->addr >> PAGE_SHIFT, | 1800 | m->addr >> PAGE_SHIFT, |
1801 | m->addr & ~PAGE_MASK, | 1801 | m->addr & ~PAGE_MASK, |
1802 | syndrome, | 1802 | syndrome, |
diff --git a/drivers/edac/i82443bxgx_edac.c b/drivers/edac/i82443bxgx_edac.c index 1c414a87195e..90f303db5d1d 100644 --- a/drivers/edac/i82443bxgx_edac.c +++ b/drivers/edac/i82443bxgx_edac.c | |||
@@ -156,7 +156,7 @@ static int i82443bxgx_edacmc_process_error_info(struct mem_ctl_info *mci, | |||
156 | if (info->eap & I82443BXGX_EAP_OFFSET_SBE) { | 156 | if (info->eap & I82443BXGX_EAP_OFFSET_SBE) { |
157 | error_found = 1; | 157 | error_found = 1; |
158 | if (handle_errors) | 158 | if (handle_errors) |
159 | edac_mc_handle_error(HW_EVENT_ERR_CORRECTED, mci, | 159 | edac_mc_handle_error(HW_EVENT_ERR_CORRECTED, mci, 1, |
160 | page, pageoffset, 0, | 160 | page, pageoffset, 0, |
161 | edac_mc_find_csrow_by_page(mci, page), | 161 | edac_mc_find_csrow_by_page(mci, page), |
162 | 0, -1, mci->ctl_name, ""); | 162 | 0, -1, mci->ctl_name, ""); |
@@ -165,7 +165,7 @@ static int i82443bxgx_edacmc_process_error_info(struct mem_ctl_info *mci, | |||
165 | if (info->eap & I82443BXGX_EAP_OFFSET_MBE) { | 165 | if (info->eap & I82443BXGX_EAP_OFFSET_MBE) { |
166 | error_found = 1; | 166 | error_found = 1; |
167 | if (handle_errors) | 167 | if (handle_errors) |
168 | edac_mc_handle_error(HW_EVENT_ERR_UNCORRECTED, mci, | 168 | edac_mc_handle_error(HW_EVENT_ERR_UNCORRECTED, mci, 1, |
169 | page, pageoffset, 0, | 169 | page, pageoffset, 0, |
170 | edac_mc_find_csrow_by_page(mci, page), | 170 | edac_mc_find_csrow_by_page(mci, page), |
171 | 0, -1, mci->ctl_name, ""); | 171 | 0, -1, mci->ctl_name, ""); |
diff --git a/drivers/edac/i82860_edac.c b/drivers/edac/i82860_edac.c index ff4f590e9b90..1faa74971513 100644 --- a/drivers/edac/i82860_edac.c +++ b/drivers/edac/i82860_edac.c | |||
@@ -109,7 +109,7 @@ static int i82860_process_error_info(struct mem_ctl_info *mci, | |||
109 | return 1; | 109 | return 1; |
110 | 110 | ||
111 | if ((info->errsts ^ info->errsts2) & 0x0003) { | 111 | if ((info->errsts ^ info->errsts2) & 0x0003) { |
112 | edac_mc_handle_error(HW_EVENT_ERR_UNCORRECTED, mci, 0, 0, 0, | 112 | edac_mc_handle_error(HW_EVENT_ERR_UNCORRECTED, mci, 1, 0, 0, 0, |
113 | -1, -1, -1, "UE overwrote CE", ""); | 113 | -1, -1, -1, "UE overwrote CE", ""); |
114 | info->errsts = info->errsts2; | 114 | info->errsts = info->errsts2; |
115 | } | 115 | } |
@@ -119,12 +119,12 @@ static int i82860_process_error_info(struct mem_ctl_info *mci, | |||
119 | dimm = mci->csrows[row]->channels[0]->dimm; | 119 | dimm = mci->csrows[row]->channels[0]->dimm; |
120 | 120 | ||
121 | if (info->errsts & 0x0002) | 121 | if (info->errsts & 0x0002) |
122 | edac_mc_handle_error(HW_EVENT_ERR_UNCORRECTED, mci, | 122 | edac_mc_handle_error(HW_EVENT_ERR_UNCORRECTED, mci, 1, |
123 | info->eap, 0, 0, | 123 | info->eap, 0, 0, |
124 | dimm->location[0], dimm->location[1], -1, | 124 | dimm->location[0], dimm->location[1], -1, |
125 | "i82860 UE", ""); | 125 | "i82860 UE", ""); |
126 | else | 126 | else |
127 | edac_mc_handle_error(HW_EVENT_ERR_UNCORRECTED, mci, | 127 | edac_mc_handle_error(HW_EVENT_ERR_UNCORRECTED, mci, 1, |
128 | info->eap, 0, info->derrsyn, | 128 | info->eap, 0, info->derrsyn, |
129 | dimm->location[0], dimm->location[1], -1, | 129 | dimm->location[0], dimm->location[1], -1, |
130 | "i82860 CE", ""); | 130 | "i82860 CE", ""); |
diff --git a/drivers/edac/i82875p_edac.c b/drivers/edac/i82875p_edac.c index 2e3f306c9c72..3e416b1a6b53 100644 --- a/drivers/edac/i82875p_edac.c +++ b/drivers/edac/i82875p_edac.c | |||
@@ -236,7 +236,7 @@ static int i82875p_process_error_info(struct mem_ctl_info *mci, | |||
236 | return 1; | 236 | return 1; |
237 | 237 | ||
238 | if ((info->errsts ^ info->errsts2) & 0x0081) { | 238 | if ((info->errsts ^ info->errsts2) & 0x0081) { |
239 | edac_mc_handle_error(HW_EVENT_ERR_UNCORRECTED, mci, 0, 0, 0, | 239 | edac_mc_handle_error(HW_EVENT_ERR_UNCORRECTED, mci, 1, 0, 0, 0, |
240 | -1, -1, -1, | 240 | -1, -1, -1, |
241 | "UE overwrote CE", ""); | 241 | "UE overwrote CE", ""); |
242 | info->errsts = info->errsts2; | 242 | info->errsts = info->errsts2; |
@@ -246,12 +246,12 @@ static int i82875p_process_error_info(struct mem_ctl_info *mci, | |||
246 | row = edac_mc_find_csrow_by_page(mci, info->eap); | 246 | row = edac_mc_find_csrow_by_page(mci, info->eap); |
247 | 247 | ||
248 | if (info->errsts & 0x0080) | 248 | if (info->errsts & 0x0080) |
249 | edac_mc_handle_error(HW_EVENT_ERR_UNCORRECTED, mci, | 249 | edac_mc_handle_error(HW_EVENT_ERR_UNCORRECTED, mci, 1, |
250 | info->eap, 0, 0, | 250 | info->eap, 0, 0, |
251 | row, -1, -1, | 251 | row, -1, -1, |
252 | "i82875p UE", ""); | 252 | "i82875p UE", ""); |
253 | else | 253 | else |
254 | edac_mc_handle_error(HW_EVENT_ERR_CORRECTED, mci, | 254 | edac_mc_handle_error(HW_EVENT_ERR_CORRECTED, mci, 1, |
255 | info->eap, 0, info->derrsyn, | 255 | info->eap, 0, info->derrsyn, |
256 | row, multi_chan ? (info->des & 0x1) : 0, | 256 | row, multi_chan ? (info->des & 0x1) : 0, |
257 | -1, "i82875p CE", ""); | 257 | -1, "i82875p CE", ""); |
diff --git a/drivers/edac/i82975x_edac.c b/drivers/edac/i82975x_edac.c index c95ebe5e4d60..069e26c11c4f 100644 --- a/drivers/edac/i82975x_edac.c +++ b/drivers/edac/i82975x_edac.c | |||
@@ -288,7 +288,7 @@ static int i82975x_process_error_info(struct mem_ctl_info *mci, | |||
288 | return 1; | 288 | return 1; |
289 | 289 | ||
290 | if ((info->errsts ^ info->errsts2) & 0x0003) { | 290 | if ((info->errsts ^ info->errsts2) & 0x0003) { |
291 | edac_mc_handle_error(HW_EVENT_ERR_UNCORRECTED, mci, 0, 0, 0, | 291 | edac_mc_handle_error(HW_EVENT_ERR_UNCORRECTED, mci, 1, 0, 0, 0, |
292 | -1, -1, -1, "UE overwrote CE", ""); | 292 | -1, -1, -1, "UE overwrote CE", ""); |
293 | info->errsts = info->errsts2; | 293 | info->errsts = info->errsts2; |
294 | } | 294 | } |
@@ -314,12 +314,12 @@ static int i82975x_process_error_info(struct mem_ctl_info *mci, | |||
314 | (1 << mci->csrows[row]->channels[chan]->dimm->grain)); | 314 | (1 << mci->csrows[row]->channels[chan]->dimm->grain)); |
315 | 315 | ||
316 | if (info->errsts & 0x0002) | 316 | if (info->errsts & 0x0002) |
317 | edac_mc_handle_error(HW_EVENT_ERR_UNCORRECTED, mci, | 317 | edac_mc_handle_error(HW_EVENT_ERR_UNCORRECTED, mci, 1, |
318 | page, offst, 0, | 318 | page, offst, 0, |
319 | row, -1, -1, | 319 | row, -1, -1, |
320 | "i82975x UE", ""); | 320 | "i82975x UE", ""); |
321 | else | 321 | else |
322 | edac_mc_handle_error(HW_EVENT_ERR_CORRECTED, mci, | 322 | edac_mc_handle_error(HW_EVENT_ERR_CORRECTED, mci, 1, |
323 | page, offst, info->derrsyn, | 323 | page, offst, info->derrsyn, |
324 | row, chan ? chan : 0, -1, | 324 | row, chan ? chan : 0, -1, |
325 | "i82975x CE", ""); | 325 | "i82975x CE", ""); |
diff --git a/drivers/edac/mpc85xx_edac.c b/drivers/edac/mpc85xx_edac.c index 56e79a053fe6..117cf00bd743 100644 --- a/drivers/edac/mpc85xx_edac.c +++ b/drivers/edac/mpc85xx_edac.c | |||
@@ -866,13 +866,13 @@ static void mpc85xx_mc_check(struct mem_ctl_info *mci) | |||
866 | mpc85xx_mc_printk(mci, KERN_ERR, "PFN out of range!\n"); | 866 | mpc85xx_mc_printk(mci, KERN_ERR, "PFN out of range!\n"); |
867 | 867 | ||
868 | if (err_detect & DDR_EDE_SBE) | 868 | if (err_detect & DDR_EDE_SBE) |
869 | edac_mc_handle_error(HW_EVENT_ERR_CORRECTED, mci, | 869 | edac_mc_handle_error(HW_EVENT_ERR_CORRECTED, mci, 1, |
870 | pfn, err_addr & ~PAGE_MASK, syndrome, | 870 | pfn, err_addr & ~PAGE_MASK, syndrome, |
871 | row_index, 0, -1, | 871 | row_index, 0, -1, |
872 | mci->ctl_name, ""); | 872 | mci->ctl_name, ""); |
873 | 873 | ||
874 | if (err_detect & DDR_EDE_MBE) | 874 | if (err_detect & DDR_EDE_MBE) |
875 | edac_mc_handle_error(HW_EVENT_ERR_UNCORRECTED, mci, | 875 | edac_mc_handle_error(HW_EVENT_ERR_UNCORRECTED, mci, 1, |
876 | pfn, err_addr & ~PAGE_MASK, syndrome, | 876 | pfn, err_addr & ~PAGE_MASK, syndrome, |
877 | row_index, 0, -1, | 877 | row_index, 0, -1, |
878 | mci->ctl_name, ""); | 878 | mci->ctl_name, ""); |
diff --git a/drivers/edac/mv64x60_edac.c b/drivers/edac/mv64x60_edac.c index e491a297f5ec..2b315c2edc3c 100644 --- a/drivers/edac/mv64x60_edac.c +++ b/drivers/edac/mv64x60_edac.c | |||
@@ -611,13 +611,13 @@ static void mv64x60_mc_check(struct mem_ctl_info *mci) | |||
611 | 611 | ||
612 | /* first bit clear in ECC Err Reg, 1 bit error, correctable by HW */ | 612 | /* first bit clear in ECC Err Reg, 1 bit error, correctable by HW */ |
613 | if (!(reg & 0x1)) | 613 | if (!(reg & 0x1)) |
614 | edac_mc_handle_error(HW_EVENT_ERR_CORRECTED, mci, | 614 | edac_mc_handle_error(HW_EVENT_ERR_CORRECTED, mci, 1, |
615 | err_addr >> PAGE_SHIFT, | 615 | err_addr >> PAGE_SHIFT, |
616 | err_addr & PAGE_MASK, syndrome, | 616 | err_addr & PAGE_MASK, syndrome, |
617 | 0, 0, -1, | 617 | 0, 0, -1, |
618 | mci->ctl_name, ""); | 618 | mci->ctl_name, ""); |
619 | else /* 2 bit error, UE */ | 619 | else /* 2 bit error, UE */ |
620 | edac_mc_handle_error(HW_EVENT_ERR_UNCORRECTED, mci, | 620 | edac_mc_handle_error(HW_EVENT_ERR_UNCORRECTED, mci, 1, |
621 | err_addr >> PAGE_SHIFT, | 621 | err_addr >> PAGE_SHIFT, |
622 | err_addr & PAGE_MASK, 0, | 622 | err_addr & PAGE_MASK, 0, |
623 | 0, 0, -1, | 623 | 0, 0, -1, |
diff --git a/drivers/edac/pasemi_edac.c b/drivers/edac/pasemi_edac.c index 04851be51612..2d35b78ada3c 100644 --- a/drivers/edac/pasemi_edac.c +++ b/drivers/edac/pasemi_edac.c | |||
@@ -110,14 +110,14 @@ static void pasemi_edac_process_error_info(struct mem_ctl_info *mci, u32 errsta) | |||
110 | /* uncorrectable/multi-bit errors */ | 110 | /* uncorrectable/multi-bit errors */ |
111 | if (errsta & (MCDEBUG_ERRSTA_MBE_STATUS | | 111 | if (errsta & (MCDEBUG_ERRSTA_MBE_STATUS | |
112 | MCDEBUG_ERRSTA_RFL_STATUS)) { | 112 | MCDEBUG_ERRSTA_RFL_STATUS)) { |
113 | edac_mc_handle_error(HW_EVENT_ERR_UNCORRECTED, mci, | 113 | edac_mc_handle_error(HW_EVENT_ERR_UNCORRECTED, mci, 1, |
114 | mci->csrows[cs]->first_page, 0, 0, | 114 | mci->csrows[cs]->first_page, 0, 0, |
115 | cs, 0, -1, mci->ctl_name, ""); | 115 | cs, 0, -1, mci->ctl_name, ""); |
116 | } | 116 | } |
117 | 117 | ||
118 | /* correctable/single-bit errors */ | 118 | /* correctable/single-bit errors */ |
119 | if (errsta & MCDEBUG_ERRSTA_SBE_STATUS) | 119 | if (errsta & MCDEBUG_ERRSTA_SBE_STATUS) |
120 | edac_mc_handle_error(HW_EVENT_ERR_CORRECTED, mci, | 120 | edac_mc_handle_error(HW_EVENT_ERR_CORRECTED, mci, 1, |
121 | mci->csrows[cs]->first_page, 0, 0, | 121 | mci->csrows[cs]->first_page, 0, 0, |
122 | cs, 0, -1, mci->ctl_name, ""); | 122 | cs, 0, -1, mci->ctl_name, ""); |
123 | } | 123 | } |
diff --git a/drivers/edac/ppc4xx_edac.c b/drivers/edac/ppc4xx_edac.c index 67a29201dae7..bf0957635991 100644 --- a/drivers/edac/ppc4xx_edac.c +++ b/drivers/edac/ppc4xx_edac.c | |||
@@ -727,7 +727,7 @@ ppc4xx_edac_handle_ce(struct mem_ctl_info *mci, | |||
727 | 727 | ||
728 | for (row = 0; row < mci->nr_csrows; row++) | 728 | for (row = 0; row < mci->nr_csrows; row++) |
729 | if (ppc4xx_edac_check_bank_error(status, row)) | 729 | if (ppc4xx_edac_check_bank_error(status, row)) |
730 | edac_mc_handle_error(HW_EVENT_ERR_CORRECTED, mci, | 730 | edac_mc_handle_error(HW_EVENT_ERR_CORRECTED, mci, 1, |
731 | 0, 0, 0, | 731 | 0, 0, 0, |
732 | row, 0, -1, | 732 | row, 0, -1, |
733 | message, ""); | 733 | message, ""); |
@@ -758,7 +758,7 @@ ppc4xx_edac_handle_ue(struct mem_ctl_info *mci, | |||
758 | 758 | ||
759 | for (row = 0; row < mci->nr_csrows; row++) | 759 | for (row = 0; row < mci->nr_csrows; row++) |
760 | if (ppc4xx_edac_check_bank_error(status, row)) | 760 | if (ppc4xx_edac_check_bank_error(status, row)) |
761 | edac_mc_handle_error(HW_EVENT_ERR_UNCORRECTED, mci, | 761 | edac_mc_handle_error(HW_EVENT_ERR_UNCORRECTED, mci, 1, |
762 | page, offset, 0, | 762 | page, offset, 0, |
763 | row, 0, -1, | 763 | row, 0, -1, |
764 | message, ""); | 764 | message, ""); |
diff --git a/drivers/edac/r82600_edac.c b/drivers/edac/r82600_edac.c index aa10178397fe..f854debd5533 100644 --- a/drivers/edac/r82600_edac.c +++ b/drivers/edac/r82600_edac.c | |||
@@ -179,7 +179,7 @@ static int r82600_process_error_info(struct mem_ctl_info *mci, | |||
179 | error_found = 1; | 179 | error_found = 1; |
180 | 180 | ||
181 | if (handle_errors) | 181 | if (handle_errors) |
182 | edac_mc_handle_error(HW_EVENT_ERR_CORRECTED, mci, | 182 | edac_mc_handle_error(HW_EVENT_ERR_CORRECTED, mci, 1, |
183 | page, 0, syndrome, | 183 | page, 0, syndrome, |
184 | edac_mc_find_csrow_by_page(mci, page), | 184 | edac_mc_find_csrow_by_page(mci, page), |
185 | 0, -1, | 185 | 0, -1, |
@@ -191,7 +191,7 @@ static int r82600_process_error_info(struct mem_ctl_info *mci, | |||
191 | 191 | ||
192 | if (handle_errors) | 192 | if (handle_errors) |
193 | /* 82600 doesn't give enough info */ | 193 | /* 82600 doesn't give enough info */ |
194 | edac_mc_handle_error(HW_EVENT_ERR_UNCORRECTED, mci, | 194 | edac_mc_handle_error(HW_EVENT_ERR_UNCORRECTED, mci, 1, |
195 | page, 0, 0, | 195 | page, 0, 0, |
196 | edac_mc_find_csrow_by_page(mci, page), | 196 | edac_mc_find_csrow_by_page(mci, page), |
197 | 0, -1, | 197 | 0, -1, |
diff --git a/drivers/edac/sb_edac.c b/drivers/edac/sb_edac.c index ae18d9849cc7..2809b07cbb01 100644 --- a/drivers/edac/sb_edac.c +++ b/drivers/edac/sb_edac.c | |||
@@ -1447,13 +1447,13 @@ static void sbridge_mce_output_error(struct mem_ctl_info *mci, | |||
1447 | /* FIXME: need support for channel mask */ | 1447 | /* FIXME: need support for channel mask */ |
1448 | 1448 | ||
1449 | /* Call the helper to output message */ | 1449 | /* Call the helper to output message */ |
1450 | edac_mc_handle_error(tp_event, mci, | 1450 | edac_mc_handle_error(tp_event, mci, 1, |
1451 | m->addr >> PAGE_SHIFT, m->addr & ~PAGE_MASK, 0, | 1451 | m->addr >> PAGE_SHIFT, m->addr & ~PAGE_MASK, 0, |
1452 | channel, dimm, -1, | 1452 | channel, dimm, -1, |
1453 | optype, msg); | 1453 | optype, msg); |
1454 | return; | 1454 | return; |
1455 | err_parsing: | 1455 | err_parsing: |
1456 | edac_mc_handle_error(tp_event, mci, 0, 0, 0, | 1456 | edac_mc_handle_error(tp_event, mci, 1, 0, 0, 0, |
1457 | -1, -1, -1, | 1457 | -1, -1, -1, |
1458 | msg, ""); | 1458 | msg, ""); |
1459 | 1459 | ||
diff --git a/drivers/edac/tile_edac.c b/drivers/edac/tile_edac.c index 0589f56aa568..1e904b7b79a0 100644 --- a/drivers/edac/tile_edac.c +++ b/drivers/edac/tile_edac.c | |||
@@ -71,7 +71,7 @@ static void tile_edac_check(struct mem_ctl_info *mci) | |||
71 | if (mem_error.sbe_count != priv->ce_count) { | 71 | if (mem_error.sbe_count != priv->ce_count) { |
72 | dev_dbg(mci->pdev, "ECC CE err on node %d\n", priv->node); | 72 | dev_dbg(mci->pdev, "ECC CE err on node %d\n", priv->node); |
73 | priv->ce_count = mem_error.sbe_count; | 73 | priv->ce_count = mem_error.sbe_count; |
74 | edac_mc_handle_error(HW_EVENT_ERR_CORRECTED, mci, | 74 | edac_mc_handle_error(HW_EVENT_ERR_CORRECTED, mci, 1, |
75 | 0, 0, 0, | 75 | 0, 0, 0, |
76 | 0, 0, -1, | 76 | 0, 0, -1, |
77 | mci->ctl_name, ""); | 77 | mci->ctl_name, ""); |
diff --git a/drivers/edac/x38_edac.c b/drivers/edac/x38_edac.c index 3d46d40987af..08a992693e62 100644 --- a/drivers/edac/x38_edac.c +++ b/drivers/edac/x38_edac.c | |||
@@ -215,7 +215,7 @@ static void x38_process_error_info(struct mem_ctl_info *mci, | |||
215 | return; | 215 | return; |
216 | 216 | ||
217 | if ((info->errsts ^ info->errsts2) & X38_ERRSTS_BITS) { | 217 | if ((info->errsts ^ info->errsts2) & X38_ERRSTS_BITS) { |
218 | edac_mc_handle_error(HW_EVENT_ERR_UNCORRECTED, mci, 0, 0, 0, | 218 | edac_mc_handle_error(HW_EVENT_ERR_UNCORRECTED, mci, 1, 0, 0, 0, |
219 | -1, -1, -1, | 219 | -1, -1, -1, |
220 | "UE overwrote CE", ""); | 220 | "UE overwrote CE", ""); |
221 | info->errsts = info->errsts2; | 221 | info->errsts = info->errsts2; |
@@ -224,13 +224,13 @@ static void x38_process_error_info(struct mem_ctl_info *mci, | |||
224 | for (channel = 0; channel < x38_channel_num; channel++) { | 224 | for (channel = 0; channel < x38_channel_num; channel++) { |
225 | log = info->eccerrlog[channel]; | 225 | log = info->eccerrlog[channel]; |
226 | if (log & X38_ECCERRLOG_UE) { | 226 | if (log & X38_ECCERRLOG_UE) { |
227 | edac_mc_handle_error(HW_EVENT_ERR_UNCORRECTED, mci, | 227 | edac_mc_handle_error(HW_EVENT_ERR_UNCORRECTED, mci, 1, |
228 | 0, 0, 0, | 228 | 0, 0, 0, |
229 | eccerrlog_row(channel, log), | 229 | eccerrlog_row(channel, log), |
230 | -1, -1, | 230 | -1, -1, |
231 | "x38 UE", ""); | 231 | "x38 UE", ""); |
232 | } else if (log & X38_ECCERRLOG_CE) { | 232 | } else if (log & X38_ECCERRLOG_CE) { |
233 | edac_mc_handle_error(HW_EVENT_ERR_CORRECTED, mci, | 233 | edac_mc_handle_error(HW_EVENT_ERR_CORRECTED, mci, 1, |
234 | 0, 0, eccerrlog_syndrome(log), | 234 | 0, 0, eccerrlog_syndrome(log), |
235 | eccerrlog_row(channel, log), | 235 | eccerrlog_row(channel, log), |
236 | -1, -1, | 236 | -1, -1, |