diff mbox

[v2] nfit: Continue init even if ARS commands are unimplemented

Message ID 1457044781-15443-1-git-send-email-vishal.l.verma@intel.com (mailing list archive)
State Accepted
Commit 6e2452dff444
Headers show

Commit Message

Verma, Vishal L March 3, 2016, 10:39 p.m. UTC
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>
---

v2:
- improve the debug message when we his this unimplemented case (Dan).

 drivers/acpi/nfit.c | 15 +++++++++++----
 1 file changed, 11 insertions(+), 4 deletions(-)

Comments

Dan Williams March 3, 2016, 10:53 p.m. UTC | #1
On Thu, Mar 3, 2016 at 2:39 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>
> ---
>
> v2:
> - improve the debug message when we his this unimplemented case (Dan).
>
>  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..35947ac 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_dbg(acpi_desc->dev,
> +                       "Address Range Scrub 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,
> --
> 2.5.0
>


Looks good to me.  Thanks Vishal!
Xiao Guangrong March 4, 2016, 3:28 a.m. UTC | #2
CCed: Haozhong.

On 03/04/2016 06:39 AM, Vishal Verma 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>

Thank you for the fix, Vishal! it looks good to me.

However, It is haozhong's credit as he is the one reported the bug not
me. :)
Haozhong Zhang March 4, 2016, 3:34 a.m. UTC | #3
On 03/04/16 11:28, Xiao Guangrong wrote:
> 
> CCed: Haozhong.
> 
> On 03/04/2016 06:39 AM, Vishal Verma 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>
> 
> Thank you for the fix, Vishal! it looks good to me.
> 
> However, It is haozhong's credit as he is the one reported the bug not
> me. :)
> 

Thanks! I have tested on QEMU which has not implemented ARS yet and
this patch does work.

Tested-by: Haozhong Zhang <haozhong.zhang@intel.com>
Vishal Verma March 4, 2016, 4:27 a.m. UTC | #4
On Fri, 2016-03-04 at 11:34 +0800, Zhang, Haozhong wrote:
> On 03/04/16 11:28, Xiao Guangrong wrote:
> > 
> > 
> > CCed: Haozhong.
> > 
> > On 03/04/2016 06:39 AM, Vishal Verma 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>
> > Thank you for the fix, Vishal! it looks good to me.
> > 
> > However, It is haozhong's credit as he is the one reported the bug
> > not
> > me. :)
> > 
> Thanks! I have tested on QEMU which has not implemented ARS yet and
> this patch does work.
> 
> Tested-by: Haozhong Zhang <haozhong.zhang@intel.com>

Thanks, both Haozhong and Guangrong. Dan, can you please fixup the
Reported-by tag when you apply.

	-Vishal

> _______________________________________________
> Linux-nvdimm mailing list
> Linux-nvdimm@lists.01.org
> https://lists.01.org/mailman/listinfo/linux-nvdimm
diff mbox

Patch

diff --git a/drivers/acpi/nfit.c b/drivers/acpi/nfit.c
index fb53db1..35947ac 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_dbg(acpi_desc->dev,
+			"Address Range Scrub 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,