On Tue, Sep 18, 2012 at 12:23 AM, Taku Izumi <izumi.taku@xxxxxxxxxxxxxx> wrote: > > 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@xxxxxxxxxxxxxx> > --- > drivers/acpi/pci_root.c | 13 ++++++++----- > 1 file changed, 8 insertions(+), 5 deletions(-) > > Index: Bjorn-next-0903/drivers/acpi/pci_root.c > =================================================================== > --- Bjorn-next-0903.orig/drivers/acpi/pci_root.c > +++ Bjorn-next-0903/drivers/acpi/pci_root.c > @@ -265,12 +265,15 @@ static acpi_status acpi_pci_osc_support( > 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)) What's the purpose of the acpi_match_device_ids() check? It's not obvious, so worth calling it out in the changelog, and maybe even a comment in the code. Nice to get rid of the list traversal. > + return NULL; > + > + root = acpi_driver_data(device); > + > + return root; > } > EXPORT_SYMBOL_GPL(acpi_pci_find_root); > > -- To unsubscribe from this list: send the line "unsubscribe linux-acpi" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html