Use pci_find_bus rather than relying on the return value of pci_scan_bus.
diff -u -p -r1.7 irq.c
--- a/arch/i386/pci/irq.c 23 Jun 2003 03:29:59 -0000 1.7
+++ b/arch/i386/pci/irq.c 3 Jul 2003 01:11:41 -0000
@@ -102,13 +102,12 @@ static void __init pirq_peer_trick(void)
#endif
busmap[e->bus] = 1;
}
- for(i=1; i<256; i++)
- /*
- * It might be a secondary bus, but in this case its parent is already
- * known (ascending bus order) and therefore pci_scan_bus returns immediately.
- */
- if (busmap[i] && pci_scan_bus(i, &pci_root_ops, NULL))
+ for(i = 1; i < 256; i++) {
+ if (!busmap[i] || pci_find_bus(0, i))
+ continue;
+ if (pci_scan_bus(i, &pci_root_ops, NULL))
printk(KERN_INFO "PCI: Discovered primary peer bus %02x [IRQ]\n", i);
+ }
pcibios_last_bus = -1;
}