Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 00d18339 authored by Mauro Carvalho Chehab's avatar Mauro Carvalho Chehab
Browse files

i7core_edac: properly handle error count



Instead of generating a burst of errors or reporting the error
count via driver-specific details, use the new way provided by
edac_mc_handle_error.

Signed-off-by: default avatarMauro Carvalho Chehab <mchehab@redhat.com>
parent 9eb07a7f
Loading
Loading
Loading
Loading
+12 −21
Original line number Diff line number Diff line
@@ -1536,18 +1536,6 @@ error:
/****************************************************************************
			Error check routines
 ****************************************************************************/
static void i7core_rdimm_update_errcount(struct mem_ctl_info *mci,
				      const int chan,
				      const int dimm,
				      const int add)
{
	int i;

	for (i = 0; i < add; i++) {
		edac_mc_handle_error(HW_EVENT_ERR_CORRECTED, mci, 1, 0, 0, 0,
				     chan, dimm, -1, "error", "");
	}
}

static void i7core_rdimm_update_ce_count(struct mem_ctl_info *mci,
					 const int chan,
@@ -1586,12 +1574,17 @@ static void i7core_rdimm_update_ce_count(struct mem_ctl_info *mci,

	/*updated the edac core */
	if (add0 != 0)
		i7core_rdimm_update_errcount(mci, chan, 0, add0);
		edac_mc_handle_error(HW_EVENT_ERR_CORRECTED, mci, add0,
				     0, 0, 0,
				     chan, 0, -1, "error", "");
	if (add1 != 0)
		i7core_rdimm_update_errcount(mci, chan, 1, add1);
		edac_mc_handle_error(HW_EVENT_ERR_CORRECTED, mci, add1,
				     0, 0, 0,
				     chan, 1, -1, "error", "");
	if (add2 != 0)
		i7core_rdimm_update_errcount(mci, chan, 2, add2);

		edac_mc_handle_error(HW_EVENT_ERR_CORRECTED, mci, add2,
				     0, 0, 0,
				     chan, 2, -1, "error", "");
}

static void i7core_rdimm_check_mc_ecc_err(struct mem_ctl_info *mci)
@@ -1710,7 +1703,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[80];
	char *type, *optype, *err;
	enum hw_event_mc_err_type tp_event;
	unsigned long error = m->status & 0x1ff0000l;
	bool uncorrected_error = m->mcgstatus & 1ll << 61;
@@ -1788,20 +1781,18 @@ static void i7core_mce_output_error(struct mem_ctl_info *mci,
		err = "unknown";
	}

	snprintf(msg, sizeof(msg), "count=%d %s", core_err_cnt, optype);

	/*
	 * Call the helper to output message
	 * FIXME: what to do if core_err_cnt > 1? Currently, it generates
	 * only one event
	 */
	if (uncorrected_error || !pvt->is_registered)
		edac_mc_handle_error(tp_event, mci, 1,
		edac_mc_handle_error(tp_event, mci, core_err_cnt,
				     m->addr >> PAGE_SHIFT,
				     m->addr & ~PAGE_MASK,
				     syndrome,
				     channel, dimm, -1,
				     err, msg);
				     err, optype);
}

/*