Skip to content

Commit

Permalink
ACPI: power: Turn off unused power resources unconditionally
Browse files Browse the repository at this point in the history
According to the ACPI specification (section 7.2.2 in ACPI 6.4), the
OS may evaluate the _OFF method of a power resource that is "off"
already [1], and in particular that can be done in the case of unused
power resources.

Accordingly, modify acpi_turn_off_unused_power_resources() to
evaluate the _OFF method for each of the unused power resources
unconditionally which may help to work around BIOS issues where the
return value of _STA for a power resource does not reflect the
actual state of the power resource [2].

Link: https://uefi.org/specs/ACPI/6.4/07_Power_and_Performance_Mgmt/declaring-a-power-resource-object.html#off # [1]
Link: https://lore.kernel.org/lkml/20210314000439.3138941-1-luzmaximilian@gmail.com/ # [2]
Tested-by: Wendy Wang <wendy.wang@intel.com>
Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
  • Loading branch information
Rafael J. Wysocki committed Mar 23, 2021
1 parent 4b9ee77 commit 7e4fdea
Showing 1 changed file with 1 addition and 10 deletions.
11 changes: 1 addition & 10 deletions drivers/acpi/power.c
Original file line number Diff line number Diff line change
Expand Up @@ -1005,18 +1005,9 @@ void acpi_turn_off_unused_power_resources(void)
mutex_lock(&power_resource_list_lock);

list_for_each_entry_reverse(resource, &acpi_power_resource_list, list_node) {
int result, state;

mutex_lock(&resource->resource_lock);

result = acpi_power_get_state(resource->device.handle, &state);
if (result) {
mutex_unlock(&resource->resource_lock);
continue;
}

if (state == ACPI_POWER_RESOURCE_STATE_ON
&& !resource->ref_count) {
if (!resource->ref_count) {
dev_info(&resource->device.dev, "Turning OFF\n");
__acpi_power_off(resource);
}
Expand Down

0 comments on commit 7e4fdea

Please sign in to comment.