Re: [PATCH 1/3] nfit: don't start a full scrub by default for an MCE

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



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



[Index of Archives]     [Linux IBM ACPI]     [Linux Power Management]     [Linux Kernel]     [Linux Laptop]     [Kernel Newbies]     [Share Photos]     [Security]     [Netfilter]     [Bugtraq]     [Yosemite News]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Samba]     [Video 4 Linux]     [Device Mapper]     [Linux Resources]

  Powered by Linux