Rafael J. Wysocki wrote:
> On Thu, Oct 19, 2023 at 2:57 PM chenxiang <[email protected]> wrote:
> >
> > From: Xiang Chen <[email protected]>
> >
> > If there is no NFIT at startup, it will return 0 immediately in function
> > acpi_nfit_add() and will not install Notify() handler. If hotplugging
> > a nvdimm device later, it will not be identified as there is no Notify()
> > handler.
>
> Yes, this is a change in behavior that shouldn't have been made.
>
> > So move handler installing before getting NFI table in function
> > acpi_nfit_add() to avoid above issue.
>
> And the fix is correct if I'm not mistaken.
>
> I can still queue it up for 6.6 if that's fine with everyone. Dan?
That is fine with me. Vishal, Dave Jiang, and I are wrangling the nvdimm
tree these days. I've prepared 6.7 already so I'll ignore this.
Ira
>
> > Fixes: dcca12ab62a2 ("ACPI: NFIT: Install Notify() handler directly")
> > Signed-off-by: Xiang Chen <[email protected]>
> > ---
> > drivers/acpi/nfit/core.c | 22 +++++++++++-----------
> > 1 file changed, 11 insertions(+), 11 deletions(-)
> >
> > diff --git a/drivers/acpi/nfit/core.c b/drivers/acpi/nfit/core.c
> > index 3826f49..9923855 100644
> > --- a/drivers/acpi/nfit/core.c
> > +++ b/drivers/acpi/nfit/core.c
> > @@ -3339,6 +3339,16 @@ static int acpi_nfit_add(struct acpi_device *adev)
> > acpi_size sz;
> > int rc = 0;
> >
> > + rc = acpi_dev_install_notify_handler(adev, ACPI_DEVICE_NOTIFY,
> > + acpi_nfit_notify, adev);
> > + if (rc)
> > + return rc;
> > +
> > + rc = devm_add_action_or_reset(dev, acpi_nfit_remove_notify_handler,
> > + adev);
> > + if (rc)
> > + return rc;
> > +
> > status = acpi_get_table(ACPI_SIG_NFIT, 0, &tbl);
> > if (ACPI_FAILURE(status)) {
> > /* The NVDIMM root device allows OS to trigger enumeration
> > of
> > @@ -3386,17 +3396,7 @@ static int acpi_nfit_add(struct acpi_device *adev)
> > if (rc)
> > return rc;
> >
> > - rc = devm_add_action_or_reset(dev, acpi_nfit_shutdown, acpi_desc);
> > - if (rc)
> > - return rc;
> > -
> > - rc = acpi_dev_install_notify_handler(adev, ACPI_DEVICE_NOTIFY,
> > - acpi_nfit_notify, adev);
> > - if (rc)
> > - return rc;
> > -
> > - return devm_add_action_or_reset(dev,
> > acpi_nfit_remove_notify_handler,
> > - adev);
> > + return devm_add_action_or_reset(dev, acpi_nfit_shutdown, acpi_desc);
> > }
> >
> > static void acpi_nfit_update_notify(struct device *dev, acpi_handle handle)
> > --
>