EDAC/mc: Pass the error descriptor to error reporting functions
Most arguments of error reporting functions are already stored in the struct edac_raw_error_desc error descriptor. Pass the error descriptor to the functions and reduce the functions' argument list. [ bp: Sort function args in reverse fir tree order. ] Signed-off-by: Robert Richter <rrichter@marvell.com> Signed-off-by: Borislav Petkov <bp@suse.de> Acked-by: Aristeu Rozanski <aris@redhat.com> Link: https://lkml.kernel.org/r/20200123090210.26933-9-rrichter@marvell.com
This commit is contained in:
parent
67792cf958
commit
6ab76179ad
@ -945,16 +945,16 @@ 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 edac_raw_error_desc *e)
|
||||||
const int pos[EDAC_MAX_LAYERS],
|
|
||||||
const u16 count)
|
|
||||||
{
|
{
|
||||||
|
int pos[EDAC_MAX_LAYERS] = { e->top_layer, e->mid_layer, e->low_layer };
|
||||||
|
struct mem_ctl_info *mci = error_desc_to_mci(e);
|
||||||
int i, index = 0;
|
int i, index = 0;
|
||||||
|
|
||||||
mci->ce_mc += count;
|
mci->ce_mc += e->error_count;
|
||||||
|
|
||||||
if (pos[0] < 0) {
|
if (pos[0] < 0) {
|
||||||
mci->ce_noinfo_count += count;
|
mci->ce_noinfo_count += e->error_count;
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -962,23 +962,23 @@ static void edac_inc_ce_error(struct mem_ctl_info *mci,
|
|||||||
if (pos[i] < 0)
|
if (pos[i] < 0)
|
||||||
break;
|
break;
|
||||||
index += pos[i];
|
index += pos[i];
|
||||||
mci->ce_per_layer[i][index] += count;
|
mci->ce_per_layer[i][index] += e->error_count;
|
||||||
|
|
||||||
if (i < mci->n_layers - 1)
|
if (i < mci->n_layers - 1)
|
||||||
index *= mci->layers[i + 1].size;
|
index *= mci->layers[i + 1].size;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static void edac_inc_ue_error(struct mem_ctl_info *mci,
|
static void edac_inc_ue_error(struct edac_raw_error_desc *e)
|
||||||
const int pos[EDAC_MAX_LAYERS],
|
|
||||||
const u16 count)
|
|
||||||
{
|
{
|
||||||
|
int pos[EDAC_MAX_LAYERS] = { e->top_layer, e->mid_layer, e->low_layer };
|
||||||
|
struct mem_ctl_info *mci = error_desc_to_mci(e);
|
||||||
int i, index = 0;
|
int i, index = 0;
|
||||||
|
|
||||||
mci->ue_mc += count;
|
mci->ue_mc += e->error_count;
|
||||||
|
|
||||||
if (pos[0] < 0) {
|
if (pos[0] < 0) {
|
||||||
mci->ue_noinfo_count += count;
|
mci->ue_noinfo_count += e->error_count;
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -986,44 +986,37 @@ static void edac_inc_ue_error(struct mem_ctl_info *mci,
|
|||||||
if (pos[i] < 0)
|
if (pos[i] < 0)
|
||||||
break;
|
break;
|
||||||
index += pos[i];
|
index += pos[i];
|
||||||
mci->ue_per_layer[i][index] += count;
|
mci->ue_per_layer[i][index] += e->error_count;
|
||||||
|
|
||||||
if (i < mci->n_layers - 1)
|
if (i < mci->n_layers - 1)
|
||||||
index *= mci->layers[i + 1].size;
|
index *= mci->layers[i + 1].size;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static void edac_ce_error(struct mem_ctl_info *mci,
|
static void edac_ce_error(struct edac_raw_error_desc *e,
|
||||||
const u16 error_count,
|
const char *detail)
|
||||||
const int pos[EDAC_MAX_LAYERS],
|
|
||||||
const char *msg,
|
|
||||||
const char *location,
|
|
||||||
const char *label,
|
|
||||||
const char *detail,
|
|
||||||
const char *other_detail,
|
|
||||||
const unsigned long page_frame_number,
|
|
||||||
const unsigned long offset_in_page,
|
|
||||||
long grain)
|
|
||||||
{
|
{
|
||||||
|
struct mem_ctl_info *mci = error_desc_to_mci(e);
|
||||||
unsigned long remapped_page;
|
unsigned long remapped_page;
|
||||||
char *msg_aux = "";
|
char *msg_aux = "";
|
||||||
|
|
||||||
if (*msg)
|
if (*e->msg)
|
||||||
msg_aux = " ";
|
msg_aux = " ";
|
||||||
|
|
||||||
if (edac_mc_get_log_ce()) {
|
if (edac_mc_get_log_ce()) {
|
||||||
if (other_detail && *other_detail)
|
if (e->other_detail && *e->other_detail)
|
||||||
edac_mc_printk(mci, KERN_WARNING,
|
edac_mc_printk(mci, KERN_WARNING,
|
||||||
"%d CE %s%son %s (%s %s - %s)\n",
|
"%d CE %s%son %s (%s %s - %s)\n",
|
||||||
error_count, msg, msg_aux, label,
|
e->error_count, e->msg, msg_aux, e->label,
|
||||||
location, detail, other_detail);
|
e->location, detail, e->other_detail);
|
||||||
else
|
else
|
||||||
edac_mc_printk(mci, KERN_WARNING,
|
edac_mc_printk(mci, KERN_WARNING,
|
||||||
"%d CE %s%son %s (%s %s)\n",
|
"%d CE %s%son %s (%s %s)\n",
|
||||||
error_count, msg, msg_aux, label,
|
e->error_count, e->msg, msg_aux, e->label,
|
||||||
location, detail);
|
e->location, detail);
|
||||||
}
|
}
|
||||||
edac_inc_ce_error(mci, pos, error_count);
|
|
||||||
|
edac_inc_ce_error(e);
|
||||||
|
|
||||||
if (mci->scrub_mode == SCRUB_SW_SRC) {
|
if (mci->scrub_mode == SCRUB_SW_SRC) {
|
||||||
/*
|
/*
|
||||||
@ -1038,51 +1031,46 @@ static void edac_ce_error(struct mem_ctl_info *mci,
|
|||||||
* be scrubbed.
|
* be scrubbed.
|
||||||
*/
|
*/
|
||||||
remapped_page = mci->ctl_page_to_phys ?
|
remapped_page = mci->ctl_page_to_phys ?
|
||||||
mci->ctl_page_to_phys(mci, page_frame_number) :
|
mci->ctl_page_to_phys(mci, e->page_frame_number) :
|
||||||
page_frame_number;
|
e->page_frame_number;
|
||||||
|
|
||||||
edac_mc_scrub_block(remapped_page,
|
edac_mc_scrub_block(remapped_page, e->offset_in_page, e->grain);
|
||||||
offset_in_page, grain);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static void edac_ue_error(struct mem_ctl_info *mci,
|
static void edac_ue_error(struct edac_raw_error_desc *e,
|
||||||
const u16 error_count,
|
const char *detail)
|
||||||
const int pos[EDAC_MAX_LAYERS],
|
|
||||||
const char *msg,
|
|
||||||
const char *location,
|
|
||||||
const char *label,
|
|
||||||
const char *detail,
|
|
||||||
const char *other_detail)
|
|
||||||
{
|
{
|
||||||
|
struct mem_ctl_info *mci = error_desc_to_mci(e);
|
||||||
char *msg_aux = "";
|
char *msg_aux = "";
|
||||||
|
|
||||||
if (*msg)
|
if (*e->msg)
|
||||||
msg_aux = " ";
|
msg_aux = " ";
|
||||||
|
|
||||||
if (edac_mc_get_log_ue()) {
|
if (edac_mc_get_log_ue()) {
|
||||||
if (other_detail && *other_detail)
|
if (e->other_detail && *e->other_detail)
|
||||||
edac_mc_printk(mci, KERN_WARNING,
|
edac_mc_printk(mci, KERN_WARNING,
|
||||||
"%d UE %s%son %s (%s %s - %s)\n",
|
"%d UE %s%son %s (%s %s - %s)\n",
|
||||||
error_count, msg, msg_aux, label,
|
e->error_count, e->msg, msg_aux, e->label,
|
||||||
location, detail, other_detail);
|
e->location, detail, e->other_detail);
|
||||||
else
|
else
|
||||||
edac_mc_printk(mci, KERN_WARNING,
|
edac_mc_printk(mci, KERN_WARNING,
|
||||||
"%d UE %s%son %s (%s %s)\n",
|
"%d UE %s%son %s (%s %s)\n",
|
||||||
error_count, msg, msg_aux, label,
|
e->error_count, e->msg, msg_aux, e->label,
|
||||||
location, detail);
|
e->location, detail);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (edac_mc_get_panic_on_ue()) {
|
if (edac_mc_get_panic_on_ue()) {
|
||||||
if (other_detail && *other_detail)
|
if (e->other_detail && *e->other_detail)
|
||||||
panic("UE %s%son %s (%s%s - %s)\n",
|
panic("UE %s%son %s (%s%s - %s)\n",
|
||||||
msg, msg_aux, label, location, detail, other_detail);
|
e->msg, msg_aux, e->label, e->location, detail,
|
||||||
|
e->other_detail);
|
||||||
else
|
else
|
||||||
panic("UE %s%son %s (%s%s)\n",
|
panic("UE %s%son %s (%s%s)\n",
|
||||||
msg, msg_aux, label, location, detail);
|
e->msg, msg_aux, e->label, e->location, detail);
|
||||||
}
|
}
|
||||||
|
|
||||||
edac_inc_ue_error(mci, pos, error_count);
|
edac_inc_ue_error(e);
|
||||||
}
|
}
|
||||||
|
|
||||||
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)
|
||||||
@ -1109,7 +1097,6 @@ void edac_raw_mc_handle_error(struct edac_raw_error_desc *e)
|
|||||||
{
|
{
|
||||||
struct mem_ctl_info *mci = error_desc_to_mci(e);
|
struct mem_ctl_info *mci = error_desc_to_mci(e);
|
||||||
char detail[80];
|
char detail[80];
|
||||||
int pos[EDAC_MAX_LAYERS] = { e->top_layer, e->mid_layer, e->low_layer };
|
|
||||||
u8 grain_bits;
|
u8 grain_bits;
|
||||||
|
|
||||||
/* Sanity-check driver-supplied grain value. */
|
/* Sanity-check driver-supplied grain value. */
|
||||||
@ -1132,16 +1119,13 @@ 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,
|
edac_ce_error(e, detail);
|
||||||
e->label, detail, e->other_detail,
|
|
||||||
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,
|
edac_ue_error(e, detail);
|
||||||
e->label, detail, e->other_detail);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user