On Wed, Sep 28, 2016 at 5:10 PM, Vishal Verma <vishal.l.verma@xxxxxxxxx> wrote: > Starting a full Address Range Scrub (ARS) on hitting a memory error > machine check exception may not always be desirable. Provide a way > through sysfs to toggle the behavior between just adding the address > (cache line) where the MCE happened to the poison list and doing a full > scrub. The former (selective insertion of the address) is done > unconditionally. > > Cc: linux-acpi@xxxxxxxxxxxxxxx > Cc: Dan Williams <dan.j.williams@xxxxxxxxx> > Cc: Linda Knippers <linda.knippers@xxxxxxx> > Cc: Rafael J. Wysocki <rafael.j.wysocki@xxxxxxxxx> > Signed-off-by: Vishal Verma <vishal.l.verma@xxxxxxxxx> > --- > drivers/acpi/nfit/core.c | 23 ++++++++++++++++++++--- > drivers/acpi/nfit/mce.c | 24 +++++++++++++++++++----- > drivers/acpi/nfit/nfit.h | 6 ++++++ > 3 files changed, 45 insertions(+), 8 deletions(-) > > diff --git a/drivers/acpi/nfit/core.c b/drivers/acpi/nfit/core.c > index 80cc7c0..ec1069e 100644 > --- a/drivers/acpi/nfit/core.c > +++ b/drivers/acpi/nfit/core.c > @@ -901,6 +901,14 @@ static ssize_t scrub_show(struct device *dev, I think scrub_show() should display the current auto-scrub mode, right? > return rc; > } > > +/* > + * The 'scrub' attribute can only have following values written to it: > + * '1': Start an on-demand scrub, and enable a full scrub to happen if a > + * machine check exception for a memory error is received. > + * '2': Switch to the default mode where a machine check will only insert > + * the address on which the memory error was received into the poison > + * and badblocks lists. > + */ > static ssize_t scrub_store(struct device *dev, > struct device_attribute *attr, const char *buf, size_t size) > { > @@ -911,15 +919,24 @@ static ssize_t scrub_store(struct device *dev, > rc = kstrtol(buf, 0, &val); > if (rc) > return rc; > - if (val != 1) > - return -EINVAL; > > device_lock(dev); > nd_desc = dev_get_drvdata(dev); > if (nd_desc) { > struct acpi_nfit_desc *acpi_desc = to_acpi_desc(nd_desc); > > - rc = acpi_nfit_ars_rescan(acpi_desc); > + switch (val) { > + case MCE_SCRUB_ON: > + rc = acpi_nfit_ars_rescan(acpi_desc); > + acpi_desc->scrub_mode = MCE_SCRUB_ON; > + break; > + case MCE_SCRUB_OFF: > + acpi_desc->scrub_mode = MCE_SCRUB_OFF; > + break; Shouldn't this still kick off a scrub? It's awkward that the only way to run a scrub is to put the driver into automatic re-scrub mode. -- To unsubscribe from this list: send the line "unsubscribe linux-acpi" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html