Commit 67792cf9 authored by Robert Richter's avatar Robert Richter Committed by Borislav Petkov

EDAC/mc: Remove enable_per_layer_report function argument

Many functions carry the enable_per_layer_report argument. This is a
bool value indicating the error information contains some location
data where the error occurred. This can easily being determined by
checking the pos[] array for values. Negative values indicate there is
no location available. So if the top layer is negative, the error
location is unknown.

Just check if the top layer is negative and remove
enable_per_layer_report as function argument and also from struct
edac_raw_error_desc.

 [ bp: Reflow comments to 80 columns, while at it. ]
Signed-off-by: default avatarRobert Richter <rrichter@marvell.com>
Signed-off-by: default avatarBorislav Petkov <bp@suse.de>
Acked-by: default avatarAristeu Rozanski <aris@redhat.com>
Link: https://lkml.kernel.org/r/20200123090210.26933-8-rrichter@marvell.com
parent 65bb4d1a
...@@ -946,7 +946,6 @@ const char *edac_layer_name[] = { ...@@ -946,7 +946,6 @@ const char *edac_layer_name[] = {
EXPORT_SYMBOL_GPL(edac_layer_name); EXPORT_SYMBOL_GPL(edac_layer_name);
static void edac_inc_ce_error(struct mem_ctl_info *mci, static void edac_inc_ce_error(struct mem_ctl_info *mci,
bool enable_per_layer_report,
const int pos[EDAC_MAX_LAYERS], const int pos[EDAC_MAX_LAYERS],
const u16 count) const u16 count)
{ {
...@@ -954,7 +953,7 @@ static void edac_inc_ce_error(struct mem_ctl_info *mci, ...@@ -954,7 +953,7 @@ static void edac_inc_ce_error(struct mem_ctl_info *mci,
mci->ce_mc += count; mci->ce_mc += count;
if (!enable_per_layer_report) { if (pos[0] < 0) {
mci->ce_noinfo_count += count; mci->ce_noinfo_count += count;
return; return;
} }
...@@ -971,7 +970,6 @@ static void edac_inc_ce_error(struct mem_ctl_info *mci, ...@@ -971,7 +970,6 @@ static void edac_inc_ce_error(struct mem_ctl_info *mci,
} }
static void edac_inc_ue_error(struct mem_ctl_info *mci, static void edac_inc_ue_error(struct mem_ctl_info *mci,
bool enable_per_layer_report,
const int pos[EDAC_MAX_LAYERS], const int pos[EDAC_MAX_LAYERS],
const u16 count) const u16 count)
{ {
...@@ -979,7 +977,7 @@ static void edac_inc_ue_error(struct mem_ctl_info *mci, ...@@ -979,7 +977,7 @@ static void edac_inc_ue_error(struct mem_ctl_info *mci,
mci->ue_mc += count; mci->ue_mc += count;
if (!enable_per_layer_report) { if (pos[0] < 0) {
mci->ue_noinfo_count += count; mci->ue_noinfo_count += count;
return; return;
} }
...@@ -1003,7 +1001,6 @@ static void edac_ce_error(struct mem_ctl_info *mci, ...@@ -1003,7 +1001,6 @@ static void edac_ce_error(struct mem_ctl_info *mci,
const char *label, const char *label,
const char *detail, const char *detail,
const char *other_detail, const char *other_detail,
const bool enable_per_layer_report,
const unsigned long page_frame_number, const unsigned long page_frame_number,
const unsigned long offset_in_page, const unsigned long offset_in_page,
long grain) long grain)
...@@ -1026,7 +1023,7 @@ static void edac_ce_error(struct mem_ctl_info *mci, ...@@ -1026,7 +1023,7 @@ static void edac_ce_error(struct mem_ctl_info *mci,
error_count, msg, msg_aux, label, error_count, msg, msg_aux, label,
location, detail); location, detail);
} }
edac_inc_ce_error(mci, enable_per_layer_report, pos, error_count); edac_inc_ce_error(mci, pos, error_count);
if (mci->scrub_mode == SCRUB_SW_SRC) { if (mci->scrub_mode == SCRUB_SW_SRC) {
/* /*
...@@ -1056,8 +1053,7 @@ static void edac_ue_error(struct mem_ctl_info *mci, ...@@ -1056,8 +1053,7 @@ static void edac_ue_error(struct mem_ctl_info *mci,
const char *location, const char *location,
const char *label, const char *label,
const char *detail, const char *detail,
const char *other_detail, const char *other_detail)
const bool enable_per_layer_report)
{ {
char *msg_aux = ""; char *msg_aux = "";
...@@ -1086,7 +1082,7 @@ static void edac_ue_error(struct mem_ctl_info *mci, ...@@ -1086,7 +1082,7 @@ static void edac_ue_error(struct mem_ctl_info *mci,
msg, msg_aux, label, location, detail); msg, msg_aux, label, location, detail);
} }
edac_inc_ue_error(mci, enable_per_layer_report, pos, error_count); edac_inc_ue_error(mci, pos, error_count);
} }
static void edac_inc_csrow(struct edac_raw_error_desc *e, int row, int chan) static void edac_inc_csrow(struct edac_raw_error_desc *e, int row, int chan)
...@@ -1136,16 +1132,16 @@ void edac_raw_mc_handle_error(struct edac_raw_error_desc *e) ...@@ -1136,16 +1132,16 @@ void edac_raw_mc_handle_error(struct edac_raw_error_desc *e)
"page:0x%lx offset:0x%lx grain:%ld syndrome:0x%lx", "page:0x%lx offset:0x%lx grain:%ld syndrome:0x%lx",
e->page_frame_number, e->offset_in_page, e->page_frame_number, e->offset_in_page,
e->grain, e->syndrome); e->grain, e->syndrome);
edac_ce_error(mci, e->error_count, pos, e->msg, e->location, e->label, edac_ce_error(mci, e->error_count, pos, e->msg, e->location,
detail, e->other_detail, e->enable_per_layer_report, e->label, detail, e->other_detail,
e->page_frame_number, e->offset_in_page, e->grain); e->page_frame_number, e->offset_in_page, e->grain);
} else { } else {
snprintf(detail, sizeof(detail), snprintf(detail, sizeof(detail),
"page:0x%lx offset:0x%lx grain:%ld", "page:0x%lx offset:0x%lx grain:%ld",
e->page_frame_number, e->offset_in_page, e->grain); e->page_frame_number, e->offset_in_page, e->grain);
edac_ue_error(mci, e->error_count, pos, e->msg, e->location, e->label, edac_ue_error(mci, e->error_count, pos, e->msg, e->location,
detail, e->other_detail, e->enable_per_layer_report); e->label, detail, e->other_detail);
} }
...@@ -1170,6 +1166,7 @@ void edac_mc_handle_error(const enum hw_event_mc_err_type type, ...@@ -1170,6 +1166,7 @@ void edac_mc_handle_error(const enum hw_event_mc_err_type type,
int pos[EDAC_MAX_LAYERS] = { top_layer, mid_layer, low_layer }; int pos[EDAC_MAX_LAYERS] = { top_layer, mid_layer, low_layer };
int i, n_labels = 0; int i, n_labels = 0;
struct edac_raw_error_desc *e = &mci->error_desc; struct edac_raw_error_desc *e = &mci->error_desc;
bool any_memory = true;
edac_dbg(3, "MC%d\n", mci->mc_idx); edac_dbg(3, "MC%d\n", mci->mc_idx);
...@@ -1187,10 +1184,9 @@ void edac_mc_handle_error(const enum hw_event_mc_err_type type, ...@@ -1187,10 +1184,9 @@ void edac_mc_handle_error(const enum hw_event_mc_err_type type,
e->other_detail = other_detail; e->other_detail = other_detail;
/* /*
* Check if the event report is consistent and if the memory * Check if the event report is consistent and if the memory location is
* location is known. If it is known, enable_per_layer_report will be * known. If it is, the DIMM(s) label info will be filled and the
* true, the DIMM(s) label info will be filled and the per-layer * per-layer error counters will be incremented.
* error counters will be incremented.
*/ */
for (i = 0; i < mci->n_layers; i++) { for (i = 0; i < mci->n_layers; i++) {
if (pos[i] >= (int)mci->layers[i].size) { if (pos[i] >= (int)mci->layers[i].size) {
...@@ -1208,7 +1204,7 @@ void edac_mc_handle_error(const enum hw_event_mc_err_type type, ...@@ -1208,7 +1204,7 @@ void edac_mc_handle_error(const enum hw_event_mc_err_type type,
pos[i] = -1; pos[i] = -1;
} }
if (pos[i] >= 0) if (pos[i] >= 0)
e->enable_per_layer_report = true; any_memory = false;
} }
/* /*
...@@ -1239,9 +1235,9 @@ void edac_mc_handle_error(const enum hw_event_mc_err_type type, ...@@ -1239,9 +1235,9 @@ void edac_mc_handle_error(const enum hw_event_mc_err_type type,
/* /*
* If the error is memory-controller wide, there's no need to * If the error is memory-controller wide, there's no need to
* seek for the affected DIMMs because the whole * seek for the affected DIMMs because the whole channel/memory
* channel/memory controller/... may be affected. * controller/... may be affected. Also, don't show errors for
* Also, don't show errors for empty DIMM slots. * empty DIMM slots.
*/ */
if (!dimm->nr_pages) if (!dimm->nr_pages)
continue; continue;
...@@ -1277,7 +1273,7 @@ void edac_mc_handle_error(const enum hw_event_mc_err_type type, ...@@ -1277,7 +1273,7 @@ void edac_mc_handle_error(const enum hw_event_mc_err_type type,
chan = -2; chan = -2;
} }
if (!e->enable_per_layer_report) if (any_memory)
strcpy(e->label, "any memory"); strcpy(e->label, "any memory");
else if (!*e->label) else if (!*e->label)
strcpy(e->label, "unknown memory"); strcpy(e->label, "unknown memory");
......
...@@ -355,11 +355,8 @@ void ghes_edac_report_mem_error(int sev, struct cper_sec_mem_err *mem_err) ...@@ -355,11 +355,8 @@ void ghes_edac_report_mem_error(int sev, struct cper_sec_mem_err *mem_err)
mem_err->mem_dev_handle); mem_err->mem_dev_handle);
index = get_dimm_smbios_index(mci, mem_err->mem_dev_handle); index = get_dimm_smbios_index(mci, mem_err->mem_dev_handle);
if (index >= 0) { if (index >= 0)
e->top_layer = index; e->top_layer = index;
e->enable_per_layer_report = true;
}
} }
if (p > e->location) if (p > e->location)
*(p - 1) = '\0'; *(p - 1) = '\0';
......
...@@ -454,8 +454,6 @@ struct errcount_attribute_data { ...@@ -454,8 +454,6 @@ struct errcount_attribute_data {
* @location: location of the error * @location: location of the error
* @label: label of the affected DIMM(s) * @label: label of the affected DIMM(s)
* @other_detail: other driver-specific detail about the error * @other_detail: other driver-specific detail about the error
* @enable_per_layer_report: if false, the error affects all layers
* (typically, a memory controller error)
*/ */
struct edac_raw_error_desc { struct edac_raw_error_desc {
char location[LOCATION_SIZE]; char location[LOCATION_SIZE];
...@@ -472,7 +470,6 @@ struct edac_raw_error_desc { ...@@ -472,7 +470,6 @@ struct edac_raw_error_desc {
unsigned long syndrome; unsigned long syndrome;
const char *msg; const char *msg;
const char *other_detail; const char *other_detail;
bool enable_per_layer_report;
}; };
/* MEMORY controller information structure /* MEMORY controller information structure
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment