Re: [PATCH v5 0/2] Incorporate DRAM address in EDAC messages

From: Yazen Ghannam

Date: Wed Jun 10 2026 - 17:16:09 EST


On Tue, Jun 09, 2026 at 05:35:16PM -0700, Borislav Petkov wrote:
> On Thu, Jun 04, 2026 at 11:48:56AM -0400, Yazen Ghannam wrote:
> > I think the issue is having concurrent updates to mci->error_desc. EDAC
> > assumes a single owner for the MCIs. The fake_inject interface basically
> > acts as a second module/owner.
>
> Ok, something like this. Ugly but it should show the intent. It probably needs
> more auditing whether we have copied all the fields we need down the
> edac_mc_handle_error() path...
>
> diff --git a/drivers/edac/debugfs.c b/drivers/edac/debugfs.c
> index 8195fc9c9354..034b9b3f9cf5 100644
> --- a/drivers/edac/debugfs.c
> +++ b/drivers/edac/debugfs.c
> @@ -14,28 +14,38 @@ static ssize_t edac_fake_inject_write(struct file *file,
> struct mem_ctl_info *mci = to_mci(dev);
> static enum hw_event_mc_err_type type;
> u16 errcount = mci->fake_inject_count;
> + struct mem_ctl_info *imci;
> +
> + imci = kmalloc(sizeof(struct mem_ctl_info), GFP_KERNEL);
> + if (!imci)
> + return -ENOMEM;
> +
> + /* use a local copy and copy the struct */
> + *imci = *mci;
>
> if (!errcount)
> errcount = 1;
>
> - type = mci->fake_inject_ue ? HW_EVENT_ERR_UNCORRECTED
> - : HW_EVENT_ERR_CORRECTED;
> + type = imci->fake_inject_ue ? HW_EVENT_ERR_UNCORRECTED
> + : HW_EVENT_ERR_CORRECTED;
>
> printk(KERN_DEBUG
> "Generating %d %s fake error%s to %d.%d.%d to test core handling. NOTE: this won't test the driver-specific decoding logic.\n",
> errcount,
> (type == HW_EVENT_ERR_UNCORRECTED) ? "UE" : "CE",
> str_plural(errcount),
> - mci->fake_inject_layer[0],
> - mci->fake_inject_layer[1],
> - mci->fake_inject_layer[2]
> + imci->fake_inject_layer[0],
> + imci->fake_inject_layer[1],
> + imci->fake_inject_layer[2]
> );
> - edac_mc_handle_error(type, mci, errcount, 0, 0, 0,
> - mci->fake_inject_layer[0],
> - mci->fake_inject_layer[1],
> - mci->fake_inject_layer[2],
> + edac_mc_handle_error(type, imci, errcount, 0, 0, 0,
> + imci->fake_inject_layer[0],
> + imci->fake_inject_layer[1],
> + imci->fake_inject_layer[2],
> "FAKE ERROR", "for EDAC testing only");
>
> + kfree(imci);
> +
> return count;
> }
>
>
>

Right, this fixes the race, and printk/trace would be okay. But the
normal EDAC interface won't get updated. I think that breaks the fake
inject use case.

Ex.
1) Use fake inject to target layer/severity.
2) Check EDAC interface to see layer/severity counters increase.

I don't use the fake inject interface, so I may be mistaken about its
use.

Thanks,
Yazen