提交 8601ca27 编写于 作者: T Tony Luck 提交者: Caspar Zhang

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

fix #29902604

commit 29b8e84fbc23cb2b70317b745641ea0569426872 upstream

Simplifies the code a little.
Acked-by: NAristeu Rozanski <aris@redhat.com>
Signed-off-by: NTony Luck <tony.luck@intel.com>
Reviewed-by: NArtie Ding <artie.ding@linux.alibaba.com>
上级 6d91d578
...@@ -101,6 +101,7 @@ void __exit skx_adxl_put(void) ...@@ -101,6 +101,7 @@ void __exit skx_adxl_put(void)
static bool skx_adxl_decode(struct decoded_addr *res) static bool skx_adxl_decode(struct decoded_addr *res)
{ {
struct skx_dev *d;
int i, len = 0; int i, len = 0;
if (res->addr >= skx_tohm || (res->addr >= skx_tolm && if (res->addr >= skx_tohm || (res->addr >= skx_tolm &&
...@@ -119,6 +120,24 @@ static bool skx_adxl_decode(struct decoded_addr *res) ...@@ -119,6 +120,24 @@ static bool skx_adxl_decode(struct decoded_addr *res)
res->channel = (int)adxl_values[component_indices[INDEX_CHANNEL]]; res->channel = (int)adxl_values[component_indices[INDEX_CHANNEL]];
res->dimm = (int)adxl_values[component_indices[INDEX_DIMM]]; 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++) { for (i = 0; i < adxl_component_count; i++) {
if (adxl_values[i] == ~0x0ull) if (adxl_values[i] == ~0x0ull)
continue; continue;
...@@ -453,24 +472,6 @@ static void skx_unregister_mci(struct skx_imc *imc) ...@@ -453,24 +472,6 @@ static void skx_unregister_mci(struct skx_imc *imc)
edac_mc_free(mci); 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, static void skx_mce_output_error(struct mem_ctl_info *mci,
const struct mce *m, const struct mce *m,
struct decoded_addr *res) struct decoded_addr *res)
...@@ -591,15 +592,12 @@ int skx_mce_check_error(struct notifier_block *nb, unsigned long val, ...@@ -591,15 +592,12 @@ int skx_mce_check_error(struct notifier_block *nb, unsigned long val,
if (adxl_component_count) { if (adxl_component_count) {
if (!skx_adxl_decode(&res)) if (!skx_adxl_decode(&res))
return NOTIFY_DONE; return NOTIFY_DONE;
} else if (!skx_decode || !skx_decode(&res)) {
mci = get_mci(res.socket, res.imc); return NOTIFY_DONE;
} else {
if (!skx_decode || !skx_decode(&res))
return NOTIFY_DONE;
mci = res.dev->imc[res.imc].mci;
} }
mci = res.dev->imc[res.imc].mci;
if (!mci) if (!mci)
return NOTIFY_DONE; return NOTIFY_DONE;
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册