On Mon, 2018-08-06 at 07:15 +0000, Ocean HY1 He wrote:
> > -----Original Message-----
> > From: Verma, Vishal L <[email protected]>
> > Sent: Saturday, August 04, 2018 1:12 AM
> > To: Williams, Dan J <[email protected]>; 
> > [email protected];
> > [email protected]; Jiang, Dave <[email protected]>; [email protected];
> > [email protected]
> > Cc: [email protected]; [email protected]; linux-
> > [email protected]; Ocean HY1 He <[email protected]>
> > 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 <[email protected]>
> > > 
> > > 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 <[email protected]>
> > > ---
> > >  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);
_______________________________________________
Linux-nvdimm mailing list
[email protected]
https://lists.01.org/mailman/listinfo/linux-nvdimm

Reply via email to