[PATCH] pci hotplug: rescan bridge after device hotplug

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



I'm tyring to support bridge hotplug and devices below it in qemu via acpi
hotplug. Currently only 1 level or 32 slots are supported. By allowing for a
second level, we will be able to support 32^2 devices.

If I first hotplug the bridge with no devices intially below it, the hotplug
code sets the bridge memory window to 0 and does not increase it when
subsequent devices are added below it.

Fix this, by calling pci_rescan_bus_bridge_resize(), on the bridge directly
below the root to re-size all the birdge windows that may have changed.

Signed-off-by: Jason Baron <jbaron@xxxxxxxxxx>
---
 drivers/pci/hotplug/acpiphp_glue.c |    8 ++++++++
 1 files changed, 8 insertions(+), 0 deletions(-)

diff --git a/drivers/pci/hotplug/acpiphp_glue.c b/drivers/pci/hotplug/acpiphp_glue.c
index 806c44f..8960c1e 100644
--- a/drivers/pci/hotplug/acpiphp_glue.c
+++ b/drivers/pci/hotplug/acpiphp_glue.c
@@ -792,6 +792,7 @@ static int __ref enable_device(struct acpiphp_slot *slot)
 {
 	struct pci_dev *dev;
 	struct pci_bus *bus = slot->bridge->pci_bus;
+	struct pci_bus *rescan_bus;
 	struct acpiphp_func *func;
 	int retval = 0;
 	int num, max, pass;
@@ -821,6 +822,13 @@ static int __ref enable_device(struct acpiphp_slot *slot)
 		}
 	}
 
+	/* Ensure we rescan/setup a bridge for new devs hanging off of it */
+	rescan_bus = bus;
+	while (rescan_bus->parent && rescan_bus->parent->self)
+		rescan_bus = rescan_bus->parent;
+	if (rescan_bus->self)
+		pci_rescan_bus_bridge_resize(rescan_bus->self);
+
 	list_for_each_entry(func, &slot->funcs, sibling)
 		acpiphp_bus_add(func);
 
-- 
1.7.7.6

--
To unsubscribe from this list: send the line "unsubscribe linux-pci" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html


[Index of Archives]     [DMA Engine]     [Linux Coverity]     [Linux USB]     [Video for Linux]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]     [Greybus]

  Powered by Linux