Hi Rafael, Today's linux-next merge of the pm tree got conflicts in drivers/acpi/scan.c and drivers/pci/hotplug/acpiphp_glue.c between commits 668192b67820 ("PCI: acpiphp: Move host bridge hotplug to pci_root.c") and be6d2867b4f6 ("PCI: acpiphp: Remove dead code for PCI host bridge hotplug") from the pci tree and commit 3757b94802fb ("ACPI / hotplug: Fix concurrency issues and memory leaks") from the pm tree. I fixed it up (thanks to Yinghai Lu for the resolution - see below) and can carry the fix as necessary (no action is required). -- Cheers, Stephen Rothwell sfr@xxxxxxxxxxxxxxxx diff --cc drivers/acpi/scan.c index a363f87,daee749..0000000 --- a/drivers/acpi/scan.c +++ b/drivers/acpi/scan.c @@@ -1707,7 -1804,7 +1804,9 @@@ int __init acpi_scan_init(void acpi_update_all_gpes(); + acpi_pci_root_hp_init(); + - return 0; + out: + mutex_unlock(&acpi_scan_lock); + return result; } diff --cc drivers/pci/hotplug/acpiphp_glue.c index 4681d2c,a951c22..0000000 --- a/drivers/pci/hotplug/acpiphp_glue.c +++ b/drivers/pci/hotplug/acpiphp_glue.c @@@ -1136,11 -1214,29 +1132,13 @@@ static void _handle_hotplug_event_bridg acpi_handle handle; u32 type; - hp_work = container_of(work, struct acpiphp_hp_work, work); + hp_work = container_of(work, struct acpi_hp_work, work); handle = hp_work->handle; type = hp_work->type; + bridge = (struct acpiphp_bridge *)hp_work->context; + acpi_scan_lock_acquire(); + - if (acpi_bus_get_device(handle, &device)) { - /* This bridge must have just been physically inserted */ - handle_bridge_insertion(handle, type); - goto out; - } - - bridge = acpiphp_handle_to_bridge(handle); - if (type == ACPI_NOTIFY_BUS_CHECK) { - acpi_walk_namespace(ACPI_TYPE_DEVICE, handle, ACPI_UINT32_MAX, - count_sub_bridges, NULL, &num_sub_bridges, NULL); - } - - if (!bridge && !num_sub_bridges) { - err("cannot get bridge info\n"); - goto out; - } - acpi_get_name(handle, ACPI_FULL_PATHNAME, &buffer); switch (type) { @@@ -1195,6 -1296,8 +1193,7 @@@ break; } -out: + acpi_scan_lock_release(); kfree(hp_work); /* allocated in handle_hotplug_event_bridge */ } @@@ -1237,6 -1342,10 +1236,8 @@@ static void _handle_hotplug_event_func( acpi_get_name(handle, ACPI_FULL_PATHNAME, &buffer); - func = (struct acpiphp_func *)context; - + acpi_scan_lock_acquire(); + switch (type) { case ACPI_NOTIFY_BUS_CHECK: /* bus re-enumerate */
Attachment:
pgpXIptd_PdSL.pgp
Description: PGP signature