diff options
| -rw-r--r-- | drivers/edac/ghes_edac.c | 13 |
1 files changed, 13 insertions, 0 deletions
diff --git a/drivers/edac/ghes_edac.c b/drivers/edac/ghes_edac.c index 1bde45141073..636dcf18d5b6 100644 --- a/drivers/edac/ghes_edac.c +++ b/drivers/edac/ghes_edac.c | |||
| @@ -15,6 +15,7 @@ | |||
| 15 | #include <linux/edac.h> | 15 | #include <linux/edac.h> |
| 16 | #include <linux/dmi.h> | 16 | #include <linux/dmi.h> |
| 17 | #include "edac_core.h" | 17 | #include "edac_core.h" |
| 18 | #include <ras/ras_event.h> | ||
| 18 | 19 | ||
| 19 | #define GHES_EDAC_REVISION " Ver: 1.0.0" | 20 | #define GHES_EDAC_REVISION " Ver: 1.0.0" |
| 20 | 21 | ||
| @@ -24,6 +25,7 @@ struct ghes_edac_pvt { | |||
| 24 | struct mem_ctl_info *mci; | 25 | struct mem_ctl_info *mci; |
| 25 | 26 | ||
| 26 | /* Buffers for the error handling routine */ | 27 | /* Buffers for the error handling routine */ |
| 28 | char detail_location[240]; | ||
| 27 | char other_detail[160]; | 29 | char other_detail[160]; |
| 28 | char msg[80]; | 30 | char msg[80]; |
| 29 | }; | 31 | }; |
| @@ -191,6 +193,7 @@ void ghes_edac_report_mem_error(struct ghes *ghes, int sev, | |||
| 191 | struct mem_ctl_info *mci; | 193 | struct mem_ctl_info *mci; |
| 192 | struct ghes_edac_pvt *pvt = NULL; | 194 | struct ghes_edac_pvt *pvt = NULL; |
| 193 | char *p; | 195 | char *p; |
| 196 | u8 grain_bits; | ||
| 194 | 197 | ||
| 195 | list_for_each_entry(pvt, &ghes_reglist, list) { | 198 | list_for_each_entry(pvt, &ghes_reglist, list) { |
| 196 | if (ghes == pvt->ghes) | 199 | if (ghes == pvt->ghes) |
| @@ -398,6 +401,16 @@ void ghes_edac_report_mem_error(struct ghes *ghes, int sev, | |||
| 398 | if (p > pvt->other_detail) | 401 | if (p > pvt->other_detail) |
| 399 | *(p - 1) = '\0'; | 402 | *(p - 1) = '\0'; |
| 400 | 403 | ||
| 404 | /* Generate the trace event */ | ||
| 405 | grain_bits = fls_long(e->grain); | ||
| 406 | sprintf(pvt->detail_location, "APEI location: %s %s", | ||
| 407 | e->location, e->other_detail); | ||
| 408 | trace_mc_event(type, e->msg, e->label, e->error_count, | ||
| 409 | mci->mc_idx, e->top_layer, e->mid_layer, e->low_layer, | ||
| 410 | PAGES_TO_MiB(e->page_frame_number) | e->offset_in_page, | ||
| 411 | grain_bits, e->syndrome, pvt->detail_location); | ||
| 412 | |||
| 413 | /* Report the error via EDAC API */ | ||
| 401 | edac_raw_mc_handle_error(type, mci, e); | 414 | edac_raw_mc_handle_error(type, mci, e); |
| 402 | } | 415 | } |
| 403 | EXPORT_SYMBOL_GPL(ghes_edac_report_mem_error); | 416 | EXPORT_SYMBOL_GPL(ghes_edac_report_mem_error); |
