2021-10-17 11:57:42

by Rafael J. Wysocki

[permalink] [raw]
Subject: [PATCH v1 0/2] ACPI: PM: Fix up turning off unused power resources

Hi,

This series fixes a regression introduced during the 5.14 cycle and related to
turning off unused ACPI power resources (patch [1/2]) and causes the states of
all power resources to be checked during initialization (patch [2/2]).

Please refer to the patch changelogs for details.

Thanks!




2021-10-17 11:57:57

by Rafael J. Wysocki

[permalink] [raw]
Subject: [PATCH v1 1/2] ACPI: PM: Do not turn off power resources in unknown state

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

Commit 6381195ad7d0 ("ACPI: power: Rework turning off unused power
resources") caused power resources in unknown state with reference
counters equal to zero to be turned off too, but that caused issues
to appear in the field, so modify the code to only turn off power
resources that are known to be "on".

Link: https://lore.kernel.org/linux-acpi/[email protected]/
Fixes: 6381195ad7d0 ("ACPI: power: Rework turning off unused power resources")
Reported-by: Andreas K. Huettel <[email protected]>
Tested-by: Andreas K. Huettel <[email protected]>
Signed-off-by: Rafael J. Wysocki <[email protected]>
Cc: 5.14+ <[email protected]> # 5.14+
---
drivers/acpi/power.c | 7 +------
1 file changed, 1 insertion(+), 6 deletions(-)

Index: linux-pm/drivers/acpi/power.c
===================================================================
--- linux-pm.orig/drivers/acpi/power.c
+++ linux-pm/drivers/acpi/power.c
@@ -1015,13 +1015,8 @@ void acpi_turn_off_unused_power_resource
list_for_each_entry_reverse(resource, &acpi_power_resource_list, list_node) {
mutex_lock(&resource->resource_lock);

- /*
- * Turn off power resources in an unknown state too, because the
- * platform firmware on some system expects the OS to turn off
- * power resources without any users unconditionally.
- */
if (!resource->ref_count &&
- resource->state != ACPI_POWER_RESOURCE_STATE_OFF) {
+ resource->state == ACPI_POWER_RESOURCE_STATE_ON) {
acpi_handle_debug(resource->device.handle, "Turning OFF\n");
__acpi_power_off(resource);
}