Commit 29b8e84f authored by Tony Luck's avatar Tony Luck
Browse files

EDAC, skx_common: Refactor so that we initialize "dev" in result of adxl decode.



Simplifies the code a little.

Acked-by: default avatarAristeu Rozanski <aris@redhat.com>
Signed-off-by: default avatarTony Luck <tony.luck@intel.com>
parent 3a5e7ec9
Loading
Loading
Loading
Loading
+23 −25
Original line number Diff line number Diff line
@@ -100,6 +100,7 @@ void __exit skx_adxl_put(void)

static bool skx_adxl_decode(struct decoded_addr *res)
{
	struct skx_dev *d;
	int i, len = 0;

	if (res->addr >= skx_tohm || (res->addr >= skx_tolm &&
@@ -118,6 +119,24 @@ static bool skx_adxl_decode(struct decoded_addr *res)
	res->channel = (int)adxl_values[component_indices[INDEX_CHANNEL]];
	res->dimm    = (int)adxl_values[component_indices[INDEX_DIMM]];

	if (res->imc > NUM_IMC - 1) {
		skx_printk(KERN_ERR, "Bad imc %d\n", res->imc);
		return false;
	}

	list_for_each_entry(d, &dev_edac_list, list) {
		if (d->imc[0].src_id == res->socket) {
			res->dev = d;
			break;
		}
	}

	if (!res->dev) {
		skx_printk(KERN_ERR, "No device for src_id %d imc %d\n",
			   res->socket, res->imc);
		return false;
	}

	for (i = 0; i < adxl_component_count; i++) {
		if (adxl_values[i] == ~0x0ull)
			continue;
@@ -452,24 +471,6 @@ static void skx_unregister_mci(struct skx_imc *imc)
	edac_mc_free(mci);
}

static struct mem_ctl_info *get_mci(int src_id, int lmc)
{
	struct skx_dev *d;

	if (lmc > NUM_IMC - 1) {
		skx_printk(KERN_ERR, "Bad lmc %d\n", lmc);
		return NULL;
	}

	list_for_each_entry(d, &dev_edac_list, list) {
		if (d->imc[0].src_id == src_id)
			return d->imc[lmc].mci;
	}

	skx_printk(KERN_ERR, "No mci for src_id %d lmc %d\n", src_id, lmc);
	return NULL;
}

static void skx_mce_output_error(struct mem_ctl_info *mci,
				 const struct mce *m,
				 struct decoded_addr *res)
@@ -580,14 +581,11 @@ int skx_mce_check_error(struct notifier_block *nb, unsigned long val,
	if (adxl_component_count) {
		if (!skx_adxl_decode(&res))
			return NOTIFY_DONE;

		mci = get_mci(res.socket, res.imc);
	} else {
		if (!skx_decode || !skx_decode(&res))
	} else if (!skx_decode || !skx_decode(&res)) {
		return NOTIFY_DONE;
	}

	mci = res.dev->imc[res.imc].mci;
	}

	if (!mci)
		return NOTIFY_DONE;