On Sat, 10 Jan 2026, Micha³ Grzelak wrote: > From: "Rafael J. Wysocki" > > Commit 32ece31db4df ("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: 32ece31db4df ("ACPI: PM: s2idle: Only retrieve constraints when needed") > Signed-off-by: Rafael J. Wysocki Signed-off-by: Micha³ Grzelak > --- > drivers/acpi/x86/s2idle.c | 8 ++++++-- > 1 file changed, 6 insertions(+), 2 deletions(-) > > diff --git a/drivers/acpi/x86/s2idle.c b/drivers/acpi/x86/s2idle.c > index 2a9edb53d5d4..cc3c83e4cc23 100644 > --- a/drivers/acpi/x86/s2idle.c > +++ b/drivers/acpi/x86/s2idle.c > @@ -28,6 +28,10 @@ static bool sleep_no_lps0 __read_mostly; > module_param(sleep_no_lps0, bool, 0644); > 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[] = { > {"PNP0D80", }, > {"", }, > @@ -515,7 +519,7 @@ static struct acpi_scan_handler lps0_handler = { > > 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) { > if (acpi_s2idle_vendor_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) > return 0; > > - if (pm_debug_messages_on) > + if (check_lps0_constraints) > lpi_check_constraints(); > > /* Screen off */ > -- > 2.45.2 > >