]> asedeno.scripts.mit.edu Git - linux.git/commitdiff
PCI: acpiphp: Create companion ACPI devices before creating PCI devices
authorJiang Liu <jiang.liu@huawei.com>
Wed, 30 Jan 2013 16:10:09 +0000 (00:10 +0800)
committerBjorn Helgaas <bhelgaas@google.com>
Fri, 1 Feb 2013 23:07:51 +0000 (16:07 -0700)
With commit 4f535093cf8f6da8c "PCI: Put pci_dev in device tree as
early as possible", companion ACPI devices should be created before
creating corresponding PCI devices, otherwise it will break the ACPI
PCI binding logic.

Without this patch, the /sys/bus/pci/devices/.../firmware_node symlink
is missing after hot-removing and hot-adding a device with acpiphp.

Signed-off-by: Jiang Liu <jiang.liu@huawei.com>
Signed-off-by: Bjorn Helgaas <bhelgaas@google.com>
drivers/pci/hotplug/acpiphp_glue.c

index bd784ff4a244fc57dfeaa6ea6c5be704b7c178bc..acb7af220310b0e7736c4b9e963b5ac7505b0602 100644 (file)
@@ -839,6 +839,9 @@ static int __ref enable_device(struct acpiphp_slot *slot)
        if (slot->flags & SLOT_ENABLED)
                goto err_exit;
 
+       list_for_each_entry(func, &slot->funcs, sibling)
+               acpiphp_bus_add(func);
+
        num = pci_scan_slot(bus, PCI_DEVFN(slot->device, 0));
        if (num == 0) {
                /* Maybe only part of funcs are added. */
@@ -862,9 +865,6 @@ static int __ref enable_device(struct acpiphp_slot *slot)
                }
        }
 
-       list_for_each_entry(func, &slot->funcs, sibling)
-               acpiphp_bus_add(func);
-
        pci_bus_assign_resources(bus);
        acpiphp_sanitize_bus(bus);
        acpiphp_set_hpp_values(bus);