mirror of
https://github.com/torvalds/linux.git
synced 2026-01-24 23:16:46 +00:00
ACPI: PM: s2idle: Add module parameter for LPS0 constraints checking
Commit32ece31db4("ACPI: PM: s2idle: Only retrieve constraints when needed") attempted to avoid useless evaluation of LPS0 _DSM Function 1 in lps0_device_attach() because pm_debug_messages_on might never be set (and that is the case on production systems most of the time), but it turns out that LPS0 _DSM Function 1 is generally problematic on some platforms and causes suspend issues to occur when pm_debug_messages_on is set now. In Linux, LPS0 _DSM Function 1 is only useful for diagnostics and only in the cases when the system does not reach the deepest platform idle state during suspend-to-idle for some reason. If such diagnostics is not necessary, evaluating it is a loss of time, so using it along with the other pm_debug_messages_on diagnostics is questionable because the latter is expected to be suitable for collecting debug information even during production use of system suspend. For this reason, add a module parameter called check_lps0_constraints to control whether or not the list of LPS0 constraints will be checked in acpi_s2idle_prepare_late_lps0() and so whether or not to evaluate LPS0 _DSM Function 1 (once) in acpi_s2idle_begin_lps0(). Fixes:32ece31db4("ACPI: PM: s2idle: Only retrieve constraints when needed") Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com> Reviewed-by: Mario Limonciello (AMD) <superm1@kernel.org> Link: https://patch.msgid.link/2827214.mvXUDI8C0e@rafael.j.wysocki
This commit is contained in:
@@ -28,6 +28,10 @@ static bool sleep_no_lps0 __read_mostly;
|
|||||||
module_param(sleep_no_lps0, bool, 0644);
|
module_param(sleep_no_lps0, bool, 0644);
|
||||||
MODULE_PARM_DESC(sleep_no_lps0, "Do not use the special LPS0 device interface");
|
MODULE_PARM_DESC(sleep_no_lps0, "Do not use the special LPS0 device interface");
|
||||||
|
|
||||||
|
static bool check_lps0_constraints __read_mostly;
|
||||||
|
module_param(check_lps0_constraints, bool, 0644);
|
||||||
|
MODULE_PARM_DESC(check_lps0_constraints, "Check LPS0 device constraints");
|
||||||
|
|
||||||
static const struct acpi_device_id lps0_device_ids[] = {
|
static const struct acpi_device_id lps0_device_ids[] = {
|
||||||
{"PNP0D80", },
|
{"PNP0D80", },
|
||||||
{"", },
|
{"", },
|
||||||
@@ -515,7 +519,7 @@ static struct acpi_scan_handler lps0_handler = {
|
|||||||
|
|
||||||
static int acpi_s2idle_begin_lps0(void)
|
static int acpi_s2idle_begin_lps0(void)
|
||||||
{
|
{
|
||||||
if (lps0_device_handle && !sleep_no_lps0 && pm_debug_messages_on &&
|
if (lps0_device_handle && !sleep_no_lps0 && check_lps0_constraints &&
|
||||||
!lpi_constraints_table) {
|
!lpi_constraints_table) {
|
||||||
if (acpi_s2idle_vendor_amd())
|
if (acpi_s2idle_vendor_amd())
|
||||||
lpi_device_get_constraints_amd();
|
lpi_device_get_constraints_amd();
|
||||||
@@ -540,7 +544,7 @@ static int acpi_s2idle_prepare_late_lps0(void)
|
|||||||
if (!lps0_device_handle || sleep_no_lps0)
|
if (!lps0_device_handle || sleep_no_lps0)
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
if (pm_debug_messages_on)
|
if (check_lps0_constraints)
|
||||||
lpi_check_constraints();
|
lpi_check_constraints();
|
||||||
|
|
||||||
/* Screen off */
|
/* Screen off */
|
||||||
|
|||||||
Reference in New Issue
Block a user