Re: [PATCH v1 1/4] ACPI: scan: Fix device check notification handling

From: Jonathan Cameron
Date: Thu Feb 22 2024 - 14:31:50 EST


On Wed, 21 Feb 2024 21:01:02 +0100
"Rafael J. Wysocki" <rjw@xxxxxxxxxxxxx> wrote:

> From: Rafael J. Wysocki <rafael.j.wysocki@xxxxxxxxx>
>
> It is generally invalid to fail a Device Check notification if the scan
> handler has not been attached to the given device after a bus rescan,
> because there may be valid reasons for the scan handler to refuse
> attaching to the device (for example, the device is not ready).
>
> For this reason, modify acpi_scan_device_check() to return 0 in that
> case without printing a warning.
>
> While at it, reduce the log level of the "already enumerated" message
> in the same function, because it is only interesting when debugging
> notification handling
>
> Fixes: 443fc8202272 ("ACPI / hotplug: Rework generic code to handle suprise removals")
> Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@xxxxxxxxx>

Seems reasonable to me. Not sure it fixes any bugs anyone has seen
in the wild though. I'd not give it a fixes tag without such a
known case, but your subsystem so fair enough!

Thanks for resolving how to handle the processor case.

Reviewed-by: Jonathan Cameron <Jonathan.Cameron@xxxxxxxxxx>
> ---
> drivers/acpi/scan.c | 8 ++------
> 1 file changed, 2 insertions(+), 6 deletions(-)
>
> Index: linux-pm/drivers/acpi/scan.c
> ===================================================================
> --- linux-pm.orig/drivers/acpi/scan.c
> +++ linux-pm/drivers/acpi/scan.c
> @@ -314,18 +314,14 @@ static int acpi_scan_device_check(struct
> * again).
> */
> if (adev->handler) {
> - dev_warn(&adev->dev, "Already enumerated\n");
> - return -EALREADY;
> + dev_dbg(&adev->dev, "Already enumerated\n");
> + return 0;
> }
> error = acpi_bus_scan(adev->handle);
> if (error) {
> dev_warn(&adev->dev, "Namespace scan failure\n");
> return error;
> }
> - if (!adev->handler) {
> - dev_warn(&adev->dev, "Enumeration failure\n");
> - error = -ENODEV;
> - }
> } else {
> error = acpi_scan_device_not_enumerated(adev);
> }
>
>
>