summaryrefslogtreecommitdiffstats
path: root/drivers/acpi
diff options
context:
space:
mode:
authorRafael J. Wysocki <rafael.j.wysocki@intel.com>2021-09-18 15:02:23 +0200
committerRafael J. Wysocki <rafael.j.wysocki@intel.com>2021-09-27 17:01:37 +0200
commit2ef5236660b677db15527b6d6235af4ce38ea0e3 (patch)
treebd93836e9c8523226dac046afcd40b3a7ecea6d9 /drivers/acpi
parentc4d19838d8c42828c7e39e4432ea5b33f02dac27 (diff)
downloadlinux-2ef5236660b677db15527b6d6235af4ce38ea0e3.tar.gz
linux-2ef5236660b677db15527b6d6235af4ce38ea0e3.tar.bz2
linux-2ef5236660b677db15527b6d6235af4ce38ea0e3.zip
ACPI: glue: Look for ACPI bus type only if ACPI companion is not known
Notice that it is not necessary to look for the "ACPI bus type" of the device in acpi_device_notify() if the device's ACPI companion is set upfront, so modify the code to do that lookup only if it is necessary to find the ACPI companion. Also notice that if the device's ACPI companion is not set upfront in acpi_device_notify(), the device cannot be either a PCI one or a platform one, so check for these bus types only if the device's ACPI companion is set. Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com> Tested-by: Ferry Toth <fntoth@gmail.com>
Diffstat (limited to 'drivers/acpi')
-rw-r--r--drivers/acpi/glue.c28
1 files changed, 17 insertions, 11 deletions
diff --git a/drivers/acpi/glue.c b/drivers/acpi/glue.c
index 49aaf18243f6..17ec6e57c4b7 100644
--- a/drivers/acpi/glue.c
+++ b/drivers/acpi/glue.c
@@ -289,12 +289,13 @@ EXPORT_SYMBOL_GPL(acpi_unbind_one);
void acpi_device_notify(struct device *dev)
{
- struct acpi_bus_type *type = acpi_get_bus_type(dev);
struct acpi_device *adev;
int ret;
ret = acpi_bind_one(dev, NULL);
if (ret) {
+ struct acpi_bus_type *type = acpi_get_bus_type(dev);
+
if (!type)
goto err;
@@ -306,21 +307,26 @@ void acpi_device_notify(struct device *dev)
ret = acpi_bind_one(dev, adev);
if (ret)
goto err;
- }
- adev = ACPI_COMPANION(dev);
- if (dev_is_pci(dev)) {
- pci_acpi_setup(dev, adev);
+ if (type->setup) {
+ type->setup(dev);
+ goto done;
+ }
} else {
- if (dev_is_platform(dev))
- acpi_configure_pmsi_domain(dev);
+ adev = ACPI_COMPANION(dev);
- if (type && type->setup)
- type->setup(dev);
- else if (adev->handler && adev->handler->bind)
- adev->handler->bind(dev);
+ if (dev_is_pci(dev)) {
+ pci_acpi_setup(dev, adev);
+ goto done;
+ } else if (dev_is_platform(dev)) {
+ acpi_configure_pmsi_domain(dev);
+ }
}
+ if (adev->handler && adev->handler->bind)
+ adev->handler->bind(dev);
+
+done:
acpi_handle_debug(ACPI_HANDLE(dev), "Bound to device %s\n",
dev_name(dev));