On Wed, Nov 10, 2021 at 8:53 PM Rafael J. Wysocki <rjw@xxxxxxxxxxxxx> wrote: > > From: Rafael J. Wysocki <rafael.j.wysocki@xxxxxxxxx> > > Commit c10383e8ddf4 ("ACPI: scan: Release PM resources blocked by > unused objects") causes power to be removed from some hardware > resources that appear to be unused too early, which leads to boot > issues on some systems. > > To address this, move putting the unused ACPI device objects into > D3cold to a late initcall. > > Fixes: c10383e8ddf4 ("ACPI: scan: Release PM resources blocked by unused objects") > Reported-by: Kyle D. Pelton <kyle.d.pelton@xxxxxxxxx> > Tested-by: Kyle D. Pelton <kyle.d.pelton@xxxxxxxxx> > Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@xxxxxxxxx> Unfortunately, this fix is not effective in some cases, so I'm going to revert commit c10383e8ddf4 for 5.16 and revisit this later. Thanks! > --- > drivers/acpi/scan.c | 22 ++++++++++++++++------ > 1 file changed, 16 insertions(+), 6 deletions(-) > > Index: linux-pm/drivers/acpi/scan.c > =================================================================== > --- linux-pm.orig/drivers/acpi/scan.c > +++ linux-pm/drivers/acpi/scan.c > @@ -2559,12 +2559,6 @@ int __init acpi_scan_init(void) > } > } > > - /* > - * Make sure that power management resources are not blocked by ACPI > - * device objects with no users. > - */ > - bus_for_each_dev(&acpi_bus_type, NULL, NULL, acpi_dev_turn_off_if_unused); > - > acpi_turn_off_unused_power_resources(); > > acpi_scan_initialized = true; > @@ -2574,6 +2568,22 @@ int __init acpi_scan_init(void) > return result; > } > > +static int acpi_turn_off_unused_devices(void) > +{ > + mutex_lock(&acpi_scan_lock); > + > + /* > + * Make sure that power management resources are not blocked by ACPI > + * device objects with no users. > + */ > + bus_for_each_dev(&acpi_bus_type, NULL, NULL, acpi_dev_turn_off_if_unused); > + > + mutex_unlock(&acpi_scan_lock); > + > + return 0; > +} > +late_initcall(acpi_turn_off_unused_devices); > + > static struct acpi_probe_entry *ape; > static int acpi_probe_count; > static DEFINE_MUTEX(acpi_probe_mutex); > > >