linux-kernel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH] ACPI: nfit: return -ENODEV if fail to find NFIT at startup
@ 2018-08-03  9:39 Ocean He
  2018-08-03  9:43 ` Johannes Thumshirn
  2018-08-03 17:11 ` Verma, Vishal L
  0 siblings, 2 replies; 5+ messages in thread
From: Ocean He @ 2018-08-03  9:39 UTC (permalink / raw)
  To: dan.j.williams, ross.zwisler, vishal.l.verma, dave.jiang, rjw, lenb
  Cc: linux-nvdimm, linux-acpi, linux-kernel, Ocean He

From: Ocean He <hehy1@lenovo.com>

In the beginning of acpi_nfit_add, if fail to find NFIT table then should
return -ENODEV, instead of 0.

Signed-off-by: Ocean He <hehy1@lenovo.com>
---
 drivers/acpi/nfit/core.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/drivers/acpi/nfit/core.c b/drivers/acpi/nfit/core.c
index 7c47900..1790d7c 100644
--- a/drivers/acpi/nfit/core.c
+++ b/drivers/acpi/nfit/core.c
@@ -3355,7 +3355,7 @@ static int acpi_nfit_add(struct acpi_device *adev)
 	if (ACPI_FAILURE(status)) {
 		/* This is ok, we could have an nvdimm hotplugged later */
 		dev_dbg(dev, "failed to find NFIT at startup\n");
-		return 0;
+		return -ENODEV;
 	}
 
 	rc = devm_add_action_or_reset(dev, acpi_nfit_put_table, tbl);
-- 
1.8.3.1


^ permalink raw reply	[flat|nested] 5+ messages in thread

* Re: [PATCH] ACPI: nfit: return -ENODEV if fail to find NFIT at startup
  2018-08-03  9:39 [PATCH] ACPI: nfit: return -ENODEV if fail to find NFIT at startup Ocean He
@ 2018-08-03  9:43 ` Johannes Thumshirn
  2018-08-03 17:11 ` Verma, Vishal L
  1 sibling, 0 replies; 5+ messages in thread
From: Johannes Thumshirn @ 2018-08-03  9:43 UTC (permalink / raw)
  To: Ocean He
  Cc: dan.j.williams, ross.zwisler, vishal.l.verma, dave.jiang, rjw,
	lenb, linux-acpi, Ocean He, linux-kernel, linux-nvdimm

Looks good,
Reviewed-by: Johannes Thumshirn <jthumshirn@suse.de>
-- 
Johannes Thumshirn                                          Storage
jthumshirn@suse.de                                +49 911 74053 689
SUSE LINUX GmbH, Maxfeldstr. 5, 90409 Nürnberg
GF: Felix Imendörffer, Jane Smithard, Graham Norton
HRB 21284 (AG Nürnberg)
Key fingerprint = EC38 9CAB C2C4 F25D 8600 D0D0 0393 969D 2D76 0850

^ permalink raw reply	[flat|nested] 5+ messages in thread

* Re: [PATCH] ACPI: nfit: return -ENODEV if fail to find NFIT at startup
  2018-08-03  9:39 [PATCH] ACPI: nfit: return -ENODEV if fail to find NFIT at startup Ocean He
  2018-08-03  9:43 ` Johannes Thumshirn
@ 2018-08-03 17:11 ` Verma, Vishal L
  2018-08-06  7:15   ` [External] " Ocean HY1 He
  1 sibling, 1 reply; 5+ messages in thread
From: Verma, Vishal L @ 2018-08-03 17:11 UTC (permalink / raw)
  To: Williams, Dan J, ross.zwisler, oceanhehy, Jiang, Dave, lenb, rjw
  Cc: linux-kernel, linux-nvdimm, linux-acpi, hehy1


On Fri, 2018-08-03 at 05:39 -0400, Ocean He wrote:
> From: Ocean He <hehy1@lenovo.com>
> 
> In the beginning of acpi_nfit_add, if fail to find NFIT table then
> should
> return -ENODEV, instead of 0.
> 
> Signed-off-by: Ocean He <hehy1@lenovo.com>
> ---
>  drivers/acpi/nfit/core.c | 2 +-
>  1 file changed, 1 insertion(+), 1 deletion(-)
> 
> diff --git a/drivers/acpi/nfit/core.c b/drivers/acpi/nfit/core.c
> index 7c47900..1790d7c 100644
> --- a/drivers/acpi/nfit/core.c
> +++ b/drivers/acpi/nfit/core.c
> @@ -3355,7 +3355,7 @@ static int acpi_nfit_add(struct acpi_device
> *adev)
>  	if (ACPI_FAILURE(status)) {
>  		/* This is ok, we could have an nvdimm hotplugged
> later */
>  		dev_dbg(dev, "failed to find NFIT at startup\n");
> -		return 0;
> +		return -ENODEV;

Hm, the comment directly above this says this is ok..
Has this caused any problems in practice?

>  	}
>  
>  	rc = devm_add_action_or_reset(dev, acpi_nfit_put_table,
> tbl);

^ permalink raw reply	[flat|nested] 5+ messages in thread

* RE: [External]  Re: [PATCH] ACPI: nfit: return -ENODEV if fail to find NFIT at startup
  2018-08-03 17:11 ` Verma, Vishal L
@ 2018-08-06  7:15   ` Ocean HY1 He
  2018-08-06 17:18     ` Verma, Vishal L
  0 siblings, 1 reply; 5+ messages in thread
From: Ocean HY1 He @ 2018-08-06  7:15 UTC (permalink / raw)
  To: Verma, Vishal L, Williams, Dan J, ross.zwisler, oceanhehy, Jiang,
	Dave, lenb, rjw
  Cc: linux-kernel, linux-nvdimm, linux-acpi



> -----Original Message-----
> From: Verma, Vishal L <vishal.l.verma@intel.com>
> Sent: Saturday, August 04, 2018 1:12 AM
> To: Williams, Dan J <dan.j.williams@intel.com>; ross.zwisler@linux.intel.com;
> oceanhehy@gmail.com; Jiang, Dave <dave.jiang@intel.com>; lenb@kernel.org;
> rjw@rjwysocki.net
> Cc: linux-kernel@vger.kernel.org; linux-nvdimm@lists.01.org; linux-
> acpi@vger.kernel.org; Ocean HY1 He <hehy1@lenovo.com>
> Subject: [External] Re: [PATCH] ACPI: nfit: return -ENODEV if fail to find NFIT at
> startup
> 
> 
> On Fri, 2018-08-03 at 05:39 -0400, Ocean He wrote:
> > From: Ocean He <hehy1@lenovo.com>
> >
> > In the beginning of acpi_nfit_add, if fail to find NFIT table then
> > should
> > return -ENODEV, instead of 0.
> >
> > Signed-off-by: Ocean He <hehy1@lenovo.com>
> > ---
> >  drivers/acpi/nfit/core.c | 2 +-
> >  1 file changed, 1 insertion(+), 1 deletion(-)
> >
> > diff --git a/drivers/acpi/nfit/core.c b/drivers/acpi/nfit/core.c
> > index 7c47900..1790d7c 100644
> > --- a/drivers/acpi/nfit/core.c
> > +++ b/drivers/acpi/nfit/core.c
> > @@ -3355,7 +3355,7 @@ static int acpi_nfit_add(struct acpi_device
> > *adev)
> >  	if (ACPI_FAILURE(status)) {
> >  		/* This is ok, we could have an nvdimm hotplugged
> > later */
> >  		dev_dbg(dev, "failed to find NFIT at startup\n");
> > -		return 0;
> > +		return -ENODEV;
> 
> Hm, the comment directly above this says this is ok..
> Has this caused any problems in practice?
> 
Thanks for your comments. After going through related codes and some test, I am 
now thinking it's right to keep "return 0" if NFIT not found at boot time.

Per chapter 9.20.2 NVDIMM Root Device in ACPI 6.2 spec:
The NVDIMM root device is represented by an ACPI namespace device with a _HID 
of "ACPI0012". This device allows the OS to trigger enumeration of NVDIMMs 
through NFIT at boot time and re-enumeration at root level via the _FIT method 
during runtime. 

The acpi_nfit_driver is registered to ACPI bus to support "ACPI0012". 
The acpi_nfit_driver.acpi_nfit_add is used to enumerate NVDIMMs through NFIT 
at boot time; The acpi_nfit_driver.acpi_nfit_notify is used to enumerate 
NVDIMMs during runtime.

In my Lenovo ThinkSystem SR630 which support NVDIMMs, If I remove 
all NVDIMMs, the NFIT table is gone after system boot up. If keep "return 0" 
in acpi_nfit_add, then acpi_nfit_driver would still be attached to "ACPI0012". 
Once a NVDIMM is hotplugged into system during runtime, then 
acpi_nfit_driver.acpi_nfit_notify can be called to enumerate NVDIMMs (I could
not do hotplug test because firmware doesn't support). 
Otherwise, "return -ENODEV" would block NVDIMM enumeration during runtime.

How do you think to adjust annotation as following?

diff --git a/drivers/acpi/nfit/core.c b/drivers/acpi/nfit/core.c
index 7c47900..1673161 100644
--- a/drivers/acpi/nfit/core.c
+++ b/drivers/acpi/nfit/core.c
@@ -3353,7 +3353,13 @@ static int acpi_nfit_add(struct acpi_device *adev)
 
        status = acpi_get_table(ACPI_SIG_NFIT, 0, &tbl);
        if (ACPI_FAILURE(status)) {
-               /* This is ok, we could have an nvdimm hotplugged later */
+               /* The NVDIMM root device allows OS to trigger enumeration of 
+                * NVDIMMs through NFIT at boot time and re-enumeration at 
+                * root level via the _FIT method during runtime.
+                * This is ok to return 0 here, we could have an nvdimm 
+                * hotplugged later and evaluate _FIT method which returns 
+                * data in the format of a series of NFIT Structures.
+                */
                dev_dbg(dev, "failed to find NFIT at startup\n");
                return 0;
        }

Ocean.

> >  	}
> >
> >  	rc = devm_add_action_or_reset(dev, acpi_nfit_put_table,
> > tbl);

^ permalink raw reply	[flat|nested] 5+ messages in thread

* Re: [External]  Re: [PATCH] ACPI: nfit: return -ENODEV if fail to find NFIT at startup
  2018-08-06  7:15   ` [External] " Ocean HY1 He
@ 2018-08-06 17:18     ` Verma, Vishal L
  0 siblings, 0 replies; 5+ messages in thread
From: Verma, Vishal L @ 2018-08-06 17:18 UTC (permalink / raw)
  To: Williams, Dan J, ross.zwisler, oceanhehy, Jiang, Dave, lenb, hehy1, rjw
  Cc: linux-kernel, linux-nvdimm, linux-acpi

On Mon, 2018-08-06 at 07:15 +0000, Ocean HY1 He wrote:
> > -----Original Message-----
> > From: Verma, Vishal L <vishal.l.verma@intel.com>
> > Sent: Saturday, August 04, 2018 1:12 AM
> > To: Williams, Dan J <dan.j.williams@intel.com>; ross.zwisler@linux.intel.com;
> > oceanhehy@gmail.com; Jiang, Dave <dave.jiang@intel.com>; lenb@kernel.org;
> > rjw@rjwysocki.net
> > Cc: linux-kernel@vger.kernel.org; linux-nvdimm@lists.01.org; linux-
> > acpi@vger.kernel.org; Ocean HY1 He <hehy1@lenovo.com>
> > Subject: [External] Re: [PATCH] ACPI: nfit: return -ENODEV if fail to find NFIT at
> > startup
> > 
> > 
> > On Fri, 2018-08-03 at 05:39 -0400, Ocean He wrote:
> > > From: Ocean He <hehy1@lenovo.com>
> > > 
> > > In the beginning of acpi_nfit_add, if fail to find NFIT table then
> > > should
> > > return -ENODEV, instead of 0.
> > > 
> > > Signed-off-by: Ocean He <hehy1@lenovo.com>
> > > ---
> > >  drivers/acpi/nfit/core.c | 2 +-
> > >  1 file changed, 1 insertion(+), 1 deletion(-)
> > > 
> > > diff --git a/drivers/acpi/nfit/core.c b/drivers/acpi/nfit/core.c
> > > index 7c47900..1790d7c 100644
> > > --- a/drivers/acpi/nfit/core.c
> > > +++ b/drivers/acpi/nfit/core.c
> > > @@ -3355,7 +3355,7 @@ static int acpi_nfit_add(struct acpi_device
> > > *adev)
> > >  	if (ACPI_FAILURE(status)) {
> > >  		/* This is ok, we could have an nvdimm hotplugged
> > > later */
> > >  		dev_dbg(dev, "failed to find NFIT at startup\n");
> > > -		return 0;
> > > +		return -ENODEV;
> > 
> > Hm, the comment directly above this says this is ok..
> > Has this caused any problems in practice?
> > 
> 
> Thanks for your comments. After going through related codes and some test, I am 
> now thinking it's right to keep "return 0" if NFIT not found at boot time.
> 
> Per chapter 9.20.2 NVDIMM Root Device in ACPI 6.2 spec:
> The NVDIMM root device is represented by an ACPI namespace device with a _HID 
> of "ACPI0012". This device allows the OS to trigger enumeration of NVDIMMs 
> through NFIT at boot time and re-enumeration at root level via the _FIT method 
> during runtime. 
> 
> The acpi_nfit_driver is registered to ACPI bus to support "ACPI0012". 
> The acpi_nfit_driver.acpi_nfit_add is used to enumerate NVDIMMs through NFIT 
> at boot time; The acpi_nfit_driver.acpi_nfit_notify is used to enumerate 
> NVDIMMs during runtime.
> 
> In my Lenovo ThinkSystem SR630 which support NVDIMMs, If I remove 
> all NVDIMMs, the NFIT table is gone after system boot up. If keep "return 0" 
> in acpi_nfit_add, then acpi_nfit_driver would still be attached to "ACPI0012". 
> Once a NVDIMM is hotplugged into system during runtime, then 
> acpi_nfit_driver.acpi_nfit_notify can be called to enumerate NVDIMMs (I could
> not do hotplug test because firmware doesn't support). 
> Otherwise, "return -ENODEV" would block NVDIMM enumeration during runtime.
> 
> How do you think to adjust annotation as following?
> 
> diff --git a/drivers/acpi/nfit/core.c b/drivers/acpi/nfit/core.c
> index 7c47900..1673161 100644
> --- a/drivers/acpi/nfit/core.c
> +++ b/drivers/acpi/nfit/core.c
> @@ -3353,7 +3353,13 @@ static int acpi_nfit_add(struct acpi_device *adev)
>  
>         status = acpi_get_table(ACPI_SIG_NFIT, 0, &tbl);
>         if (ACPI_FAILURE(status)) {
> -               /* This is ok, we could have an nvdimm hotplugged later */
> +               /* The NVDIMM root device allows OS to trigger enumeration of 
> +                * NVDIMMs through NFIT at boot time and re-enumeration at 
> +                * root level via the _FIT method during runtime.
> +                * This is ok to return 0 here, we could have an nvdimm 
> +                * hotplugged later and evaluate _FIT method which returns 
> +                * data in the format of a series of NFIT Structures.
> +                */
>                 dev_dbg(dev, "failed to find NFIT at startup\n");
>                 return 0;
>         }

Yes, this sounds reasonable to me.

Thanks,
	-Vishal

> 
> Ocean.
> 
> > >  	}
> > > 
> > >  	rc = devm_add_action_or_reset(dev, acpi_nfit_put_table,
> > > tbl);

^ permalink raw reply	[flat|nested] 5+ messages in thread

end of thread, other threads:[~2018-08-06 17:18 UTC | newest]

Thread overview: 5+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2018-08-03  9:39 [PATCH] ACPI: nfit: return -ENODEV if fail to find NFIT at startup Ocean He
2018-08-03  9:43 ` Johannes Thumshirn
2018-08-03 17:11 ` Verma, Vishal L
2018-08-06  7:15   ` [External] " Ocean HY1 He
2018-08-06 17:18     ` Verma, Vishal L

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).