diff options
author | Taku Izumi <izumi.taku@jp.fujitsu.com> | 2012-09-18 08:23:23 +0200 |
---|---|---|
committer | Bjorn Helgaas <bhelgaas@google.com> | 2012-09-24 23:29:40 +0200 |
commit | cd4faf9c34b27cbb6bcc70a4f1d1759f2e6fa7fd (patch) | |
tree | e33941ddbff56873ef29e33ec090289a06c84e96 /drivers/acpi | |
parent | PCI/ACPI: Protect acpi_pci_roots list with mutex (diff) | |
download | linux-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.c | 13 |
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); |