summaryrefslogtreecommitdiffstats
path: root/drivers/acpi
diff options
context:
space:
mode:
authorTaku Izumi <izumi.taku@jp.fujitsu.com>2012-09-18 08:23:23 +0200
committerBjorn Helgaas <bhelgaas@google.com>2012-09-24 23:29:40 +0200
commitcd4faf9c34b27cbb6bcc70a4f1d1759f2e6fa7fd (patch)
treee33941ddbff56873ef29e33ec090289a06c84e96 /drivers/acpi
parentPCI/ACPI: Protect acpi_pci_roots list with mutex (diff)
downloadlinux-cd4faf9c34b27cbb6bcc70a4f1d1759f2e6fa7fd.tar.xz
linux-cd4faf9c34b27cbb6bcc70a4f1d1759f2e6fa7fd.zip
PCI/ACPI: Use acpi_driver_data() rather than searching acpi_pci_roots
This patch changes the implementation of acpi_pci_find_root(). We can access acpi_pci_root without scanning acpi_pci_roots list. If hostbridge hotplug is supported, acpi_pci_roots list will be protected by mutex. We should not access acpi_pci_roots list if preventable to lessen deadlock risk. Signed-off-by: Taku Izumi <izumi.taku@jp.fujitsu.com> Signed-off-by: Bjorn Helgaas <bhelgaas@google.com>
Diffstat (limited to 'drivers/acpi')
-rw-r--r--drivers/acpi/pci_root.c13
1 files changed, 8 insertions, 5 deletions
diff --git a/drivers/acpi/pci_root.c b/drivers/acpi/pci_root.c
index e1bdcc700cbb..13f9b5ba3354 100644
--- a/drivers/acpi/pci_root.c
+++ b/drivers/acpi/pci_root.c
@@ -270,12 +270,15 @@ static acpi_status acpi_pci_osc_support(struct acpi_pci_root *root, u32 flags)
struct acpi_pci_root *acpi_pci_find_root(acpi_handle handle)
{
struct acpi_pci_root *root;
+ struct acpi_device *device;
- list_for_each_entry(root, &acpi_pci_roots, node) {
- if (root->device->handle == handle)
- return root;
- }
- return NULL;
+ if (acpi_bus_get_device(handle, &device) ||
+ acpi_match_device_ids(device, root_device_ids))
+ return NULL;
+
+ root = acpi_driver_data(device);
+
+ return root;
}
EXPORT_SYMBOL_GPL(acpi_pci_find_root);