Message ID | 1457040097-10038-1-git-send-email-vishal.l.verma@intel.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
On Thu, Mar 3, 2016 at 1:21 PM, Vishal Verma <vishal.l.verma@intel.com> wrote: > If firmware doesn't implement any of the ARS commands, take that to > mean that ARS is unsupported, and continue to initialize regions without > bad block lists. We cannot make the assumption that ARS commands will be > unconditionally supported on all NVDIMMs. > > Cc: Dan Williams <dan.j.williams@intel.com> > Reported-by: Xiao Guangrong <guangrong.xiao@linux.intel.com> > Signed-off-by: Vishal Verma <vishal.l.verma@intel.com> > --- > drivers/acpi/nfit.c | 15 +++++++++++---- > 1 file changed, 11 insertions(+), 4 deletions(-) > > diff --git a/drivers/acpi/nfit.c b/drivers/acpi/nfit.c > index fb53db1..df99e33 100644 > --- a/drivers/acpi/nfit.c > +++ b/drivers/acpi/nfit.c > @@ -1590,14 +1590,21 @@ static int acpi_nfit_find_poison(struct acpi_nfit_desc *acpi_desc, > start = ndr_desc->res->start; > len = ndr_desc->res->end - ndr_desc->res->start + 1; > > + /* > + * If ARS is unimplemented, unsupported, or if the 'Persistent Memory > + * Scrub' flag in extended status is not set, skip this but continue > + * initialization > + */ > rc = ars_get_cap(nd_desc, ars_cap, start, len); > + if (rc == -ENOTTY) { > + dev_warn(acpi_desc->dev, > + "ARS_CAP is not implemented, won't create an error list\n"); s/ARS_CAP/Address range scrub/ Also, let's make this dev_dbg(), since it's not a requirement that a bus provider implement scrub commands.
diff --git a/drivers/acpi/nfit.c b/drivers/acpi/nfit.c index fb53db1..df99e33 100644 --- a/drivers/acpi/nfit.c +++ b/drivers/acpi/nfit.c @@ -1590,14 +1590,21 @@ static int acpi_nfit_find_poison(struct acpi_nfit_desc *acpi_desc, start = ndr_desc->res->start; len = ndr_desc->res->end - ndr_desc->res->start + 1; + /* + * If ARS is unimplemented, unsupported, or if the 'Persistent Memory + * Scrub' flag in extended status is not set, skip this but continue + * initialization + */ rc = ars_get_cap(nd_desc, ars_cap, start, len); + if (rc == -ENOTTY) { + dev_warn(acpi_desc->dev, + "ARS_CAP is not implemented, won't create an error list\n"); + rc = 0; + goto out; + } if (rc) goto out; - /* - * If ARS is unsupported, or if the 'Persistent Memory Scrub' flag in - * extended status is not set, skip this but continue initialization - */ if ((ars_cap->status & 0xffff) || !(ars_cap->status >> 16 & ND_ARS_PERSISTENT)) { dev_warn(acpi_desc->dev,
If firmware doesn't implement any of the ARS commands, take that to mean that ARS is unsupported, and continue to initialize regions without bad block lists. We cannot make the assumption that ARS commands will be unconditionally supported on all NVDIMMs. Cc: Dan Williams <dan.j.williams@intel.com> Reported-by: Xiao Guangrong <guangrong.xiao@linux.intel.com> Signed-off-by: Vishal Verma <vishal.l.verma@intel.com> --- drivers/acpi/nfit.c | 15 +++++++++++---- 1 file changed, 11 insertions(+), 4 deletions(-)