Re: [PATCH v5 0/2] Incorporate DRAM address in EDAC messages
Yazen Ghannam <[email protected]>
| Newsgroups | org.kernel.vger.linux-edac,org.kernel.vger.linux-kernel |
|---|---|
| Message-ID | <[email protected]> |
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