From: Chuck Ebbert <76306.1226@compuserve.com>

2.4 builds its global PCI device list in breadth-first order.

2.5 is doing the scan that way but defers the construction of the global list
until later and then does it depth-first.  This causes devices to found in
different order by drivers.  The below fixed that problem for me.

Russell King has acked this change.


 drivers/pci/bus.c |    9 ++++++++-
 1 files changed, 8 insertions(+), 1 deletion(-)

diff -puN drivers/pci/bus.c~pci-bus-ordering-fix drivers/pci/bus.c
--- 25/drivers/pci/bus.c~pci-bus-ordering-fix	2003-04-18 18:52:36.000000000 -0700
+++ 25-akpm/drivers/pci/bus.c	2003-04-18 18:52:36.000000000 -0700
@@ -75,7 +75,8 @@ pci_bus_alloc_resource(struct pci_bus *b
  * Add newly discovered PCI devices (which are on the bus->devices
  * list) to the global PCI device list, add the sysfs and procfs
  * entries.  Where a bridge is found, add the discovered bus to
- * the parents list of child buses, and recurse.
+ * the parents list of child buses, and recurse (breadth-first
+ * to be compatible with 2.4)
  *
  * Call hotplug for each new devices.
  */
@@ -98,6 +99,12 @@ void __devinit pci_bus_add_devices(struc
 #endif
 		pci_create_sysfs_dev_files(dev);
 
+	}
+
+	list_for_each_entry(dev, &bus->devices, bus_list) {
+
+		BUG_ON(list_empty(&dev->global_list));
+
 		/*
 		 * If there is an unattached subordinate bus, attach
 		 * it and then scan for unattached PCI devices.

_