Received: by 2002:a05:6a10:9848:0:0:0:0 with SMTP id x8csp787229pxf; Thu, 18 Mar 2021 11:30:33 -0700 (PDT) X-Google-Smtp-Source: ABdhPJzvz4Q6XSP5EJaaUHp+MFxIiAGcYJ4oqoRkL3S21KJl79JtngBP7uar7JzHlB5fZ95uCJbm X-Received: by 2002:a17:907:2d89:: with SMTP id gt9mr42567220ejc.226.1616092233357; Thu, 18 Mar 2021 11:30:33 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1616092233; cv=none; d=google.com; s=arc-20160816; b=xFSwCjuc2RnKI86drhTNCmVzeKCrDswmIjUQGcNa0/7VjFHkVVqnqtT6r4kn34GQ/Y Rv1DmL59NIPFTWdD7T261mutoeKM+7UD9CE5fP9lq+OyG5kLwSPK4L/v523cM3ulzl+u vDYxp4YxWYoyJsy5QsJPNegixxkxc/APdJKeKyA1XYXl1nPuH/BCmAH5qGeToBSUNq9S 9Oe4X2SYc7WAZwNcuNgJyqH+bibt2TtH2O98687oJK03Su1bR/EOMRysR5qEwP9GDbxf HlMCG1NMxjosZ7iyFdtnDb1HXR4kBer0mpY4uoe0tmGLgC7wuDGQiwJSGzuWWK+IrvLv TNBA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:mime-version :references:in-reply-to:message-id:date:subject:cc:to:from; bh=iDaALUL/LL69fAhSmTN+puNhwzBDkeRrlUu1Jb3k6C0=; b=eux3tOZbdz25n/wVKldaZKppAIgSwxFYT71jcMkPVEhzPB07V2WibpQNfYc0HiCqnQ u6QqnqUZJUYDl5W6RsQ2v0GUygZk7/jUqqekAHyM6QvotF28v6QEgeSeBA6X5ZkXMWRq Jxk/00ujk3nOTn0XkYDX2P9W7crRcj3IUk1M5996eP21Bo9GuodQ+Del3mL/FFj85VuU raGYf5QWT1dVKDbi2piQkKEJTy9Dek7cyv19LY4xoH1fRSWHWI+lOT3UQ9PQhYM9uDP5 4eRnJ3BzL79EqGXtsL/dpznEvqkiZVrm1qMvMZOUDMGlWBGW4yWH/zsgZyDdyOKjyxk9 Mgvw== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id dk21si2326701ejb.324.2021.03.18.11.30.10; Thu, 18 Mar 2021 11:30:33 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) client-ip=23.128.96.18; Authentication-Results: mx.google.com; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S232476AbhCRS3Q (ORCPT + 99 others); Thu, 18 Mar 2021 14:29:16 -0400 Received: from cloudserver094114.home.pl ([79.96.170.134]:63892 "EHLO cloudserver094114.home.pl" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S232262AbhCRS3K (ORCPT ); Thu, 18 Mar 2021 14:29:10 -0400 Received: from localhost (127.0.0.1) (HELO v370.home.net.pl) by /usr/run/smtp (/usr/run/postfix/private/idea_relay_lmtp) via UNIX with SMTP (IdeaSmtpServer 2.0.3) id 820c3476cb80a778; Thu, 18 Mar 2021 19:29:08 +0100 Received: from kreacher.localnet (89-64-80-250.dynamic.chello.pl [89.64.80.250]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest SHA256) (No client certificate requested) by v370.home.net.pl (Postfix) with ESMTPSA id 42D9D668FA9; Thu, 18 Mar 2021 19:29:08 +0100 (CET) From: "Rafael J. Wysocki" To: Linux ACPI Cc: LKML , Linux PM , David Box Subject: [PATCH v2 1/2] ACPI: scan: Turn off unused power resources during initialization Date: Thu, 18 Mar 2021 19:25:12 +0100 Message-ID: <9860889.nUPlyArG6x@kreacher> In-Reply-To: <3108574.44csPzL39Z@kreacher> References: <3108574.44csPzL39Z@kreacher> MIME-Version: 1.0 Content-Transfer-Encoding: 7Bit Content-Type: text/plain; charset="us-ascii" X-VADE-SPAMSTATE: clean X-VADE-SPAMCAUSE: gggruggvucftvghtrhhoucdtuddrgeduledrudefiedgudduhecutefuodetggdotefrodftvfcurfhrohhfihhlvgemucfjqffogffrnfdpggftiffpkfenuceurghilhhouhhtmecuudehtdenucesvcftvggtihhpihgvnhhtshculddquddttddmnecujfgurhephffvufffkfgjfhgggfgtsehtufertddttddvnecuhfhrohhmpedftfgrfhgrvghlucflrdcuhgihshhotghkihdfuceorhhjfiesrhhjfiihshhotghkihdrnhgvtheqnecuggftrfgrthhtvghrnhephfekveffledtuefgueevudetgfeukeegudeufeeljeetgfetleefudevledvtdejnecuffhomhgrihhnpehuvghfihdrohhrghenucfkphepkeelrdeigedrkedtrddvhedtnecuvehluhhsthgvrhfuihiivgeptdenucfrrghrrghmpehinhgvthepkeelrdeigedrkedtrddvhedtpdhhvghlohepkhhrvggrtghhvghrrdhlohgtrghlnhgvthdpmhgrihhlfhhrohhmpedftfgrfhgrvghlucflrdcuhgihshhotghkihdfuceorhhjfiesrhhjfiihshhotghkihdrnhgvtheqpdhrtghpthhtoheplhhinhhugidqrggtphhisehvghgvrhdrkhgvrhhnvghlrdhorhhgpdhrtghpthhtoheplhhinhhugidqkhgvrhhnvghlsehvghgvrhdrkhgvrhhnvghlrdhorhhgpdhrtghpthhtoheplhhinhhugidqphhmsehvghgvrhdrkhgvrhhnvghlrdhorhhgpdhrtghpthhtohepuggrvhhiugdrvgdrsghogieslhhinhhugidrihhnthgvlhdrtgho mh X-DCC--Metrics: v370.home.net.pl 1024; Body=4 Fuz1=4 Fuz2=4 Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org From: Rafael J. Wysocki It is reported that on certain platforms there are power resources that are not associated with any devices physically present in the platform. Those power resources are expected to be turned off by the OS in accordance with the ACPI specification (section 7.3 of ACPI 6.4) which currently is not done by Linux and that may lead to obscure issues. For instance, leaving those power resources in the "on" state may prevent the platform from reaching the lowest power state in suspend-to-idle which leads to excessive power draw. For this reason, turn all of the unused ACPI power resources off at the end of the initial namespace scan for devices in analogy with resume from suspend-to-RAM. Link: https://uefi.org/specs/ACPI/6.4/07_Power_and_Performance_Mgmt/device-power-management-objects.html Reported-by: David Box Signed-off-by: Rafael J. Wysocki --- -> v2: Expand the changelog somewhat and make it build with CONFIG_PM_SLEEP unset. --- drivers/acpi/internal.h | 1 + drivers/acpi/power.c | 2 +- drivers/acpi/scan.c | 2 ++ drivers/acpi/sleep.h | 1 - 4 files changed, 4 insertions(+), 2 deletions(-) Index: linux-pm/drivers/acpi/internal.h =================================================================== --- linux-pm.orig/drivers/acpi/internal.h +++ linux-pm/drivers/acpi/internal.h @@ -139,6 +139,7 @@ int acpi_device_sleep_wake(struct acpi_d int acpi_power_get_inferred_state(struct acpi_device *device, int *state); int acpi_power_on_resources(struct acpi_device *device, int state); int acpi_power_transition(struct acpi_device *device, int state); +void acpi_turn_off_unused_power_resources(void); /* -------------------------------------------------------------------------- Device Power Management Index: linux-pm/drivers/acpi/scan.c =================================================================== --- linux-pm.orig/drivers/acpi/scan.c +++ linux-pm/drivers/acpi/scan.c @@ -2360,6 +2360,8 @@ int __init acpi_scan_init(void) } } + acpi_turn_off_unused_power_resources(); + acpi_scan_initialized = true; out: Index: linux-pm/drivers/acpi/sleep.h =================================================================== --- linux-pm.orig/drivers/acpi/sleep.h +++ linux-pm/drivers/acpi/sleep.h @@ -8,7 +8,6 @@ extern struct list_head acpi_wakeup_devi extern struct mutex acpi_device_lock; extern void acpi_resume_power_resources(void); -extern void acpi_turn_off_unused_power_resources(void); static inline acpi_status acpi_set_waking_vector(u32 wakeup_address) { Index: linux-pm/drivers/acpi/power.c =================================================================== --- linux-pm.orig/drivers/acpi/power.c +++ linux-pm/drivers/acpi/power.c @@ -996,6 +996,7 @@ void acpi_resume_power_resources(void) mutex_unlock(&power_resource_list_lock); } +#endif void acpi_turn_off_unused_power_resources(void) { @@ -1025,4 +1026,3 @@ void acpi_turn_off_unused_power_resource mutex_unlock(&power_resource_list_lock); } -#endif