2024-02-21 20:05:23

by Rafael J. Wysocki

[permalink] [raw]
Subject: [PATCH v1 1/4] ACPI: scan: Fix device check notification handling

From: Rafael J. Wysocki <[email protected]>

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 <[email protected]>
---
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);
}





2024-02-22 19:47:25

by Jonathan Cameron

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

On Wed, 21 Feb 2024 21:01:02 +0100
"Rafael J. Wysocki" <[email protected]> wrote:

> From: Rafael J. Wysocki <[email protected]>
>
> 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 <[email protected]>

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 <[email protected]>
> ---
> 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);
> }
>
>
>