> -----Original Message----- > From: Verma, Vishal L <vishal.l.verma@xxxxxxxxx> > Sent: Saturday, August 04, 2018 1:12 AM > To: Williams, Dan J <dan.j.williams@xxxxxxxxx>; ross.zwisler@xxxxxxxxxxxxxxx; > oceanhehy@xxxxxxxxx; Jiang, Dave <dave.jiang@xxxxxxxxx>; lenb@xxxxxxxxxx; > rjw@xxxxxxxxxxxxx > Cc: linux-kernel@xxxxxxxxxxxxxxx; linux-nvdimm@xxxxxxxxxxxx; linux- > acpi@xxxxxxxxxxxxxxx; Ocean HY1 He <hehy1@xxxxxxxxxx> > 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@xxxxxxxxxx> > > > > 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@xxxxxxxxxx> > > --- > > 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); ��.n��������+%������w��{.n�����{�����ܨ}���Ơz�j:+v�����w����ޙ��&�)ߡ�a����z�ޗ���ݢj��w�f