ACPI: scan: Reduce overhead related to devices with dependencies
authorRafael J. Wysocki <rafael.j.wysocki@intel.com>
Tue, 16 May 2023 10:25:22 +0000 (12:25 +0200)
committerRafael J. Wysocki <rafael.j.wysocki@intel.com>
Mon, 5 Jun 2023 15:22:51 +0000 (17:22 +0200)
commit3ba12d8de3faa666ba2d6d01863feca73518a743
treec2ffbb20a2d04d089f495dedbef1d99809d5bba4
parent9561de3a55bed6bdd44a12820ba81ec416e705a7
ACPI: scan: Reduce overhead related to devices with dependencies

Notice that all of the objects for which the acpi_scan_check_dep()
return value is greater than 0 are present in acpi_dep_list as consumers
(there may be multiple entries for one object, but that is not a
problem), so after carrying out the initial ACPI namespace walk in which
devices with dependencies are skipped, acpi_bus_scan() can simply walk
acpi_dep_list and enumerate all of the unique consumer objects from
there and their descendants instead of walking the entire target branch
of the ACPI namespace and looking for device objects that have not been
enumerated yet in it.

Because walking acpi_dep_list is generally less overhead than walking
the entire ACPI namespace, use the observation above to reduce the
system initialization overhead related to ACPI, which is particularly
important on large systems.

Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
Reviewed-by: Hans de Goede <hdegoede@redhat.com>
drivers/acpi/scan.c
include/acpi/acpi_bus.h