It's worse than that.
> Does this fix it?
It won't.
Look,
pci_legacy_init() sets pci_root_bus
pcibios_irq_init() calls pirq_peer_trick(), which uses pci_root_bus
Hence: pci_legacy_init() must come before pcibios_irq_init()
pcibios_irq_init() sets pcibios_enable_irq
pci_legacy_init() calls into drivers, which call pcibios_enable_device(),
which uses pcibios_enable_irq
Hence: pci_legacy_init() must come _after_ pcibios_irq_init()
uh-oh.
(and pci_direct_init() and pci_pcbios_init() need to come before
pci_legacy_init(), because pci_legacy_init() needs pci_root_ops)
For some reason, the below patch stops the oopses. Not sure why.
Greg, do you have time/inclination to untangle (and preferably document)
this mess?
diff -puN arch/i386/pci/irq.c~pci-init-ordering-fix arch/i386/pci/irq.c
--- 25/arch/i386/pci/irq.c~pci-init-ordering-fix Tue Jun 10 15:40:19 2003
+++ 25-akpm/arch/i386/pci/irq.c Tue Jun 10 15:40:19 2003
@@ -791,7 +791,7 @@ static int __init pcibios_irq_init(void)
return 0;
}
-subsys_initcall(pcibios_irq_init);
+arch_initcall(pcibios_irq_init);
void pcibios_penalize_isa_irq(int irq)
diff -puN arch/i386/pci/legacy.c~pci-init-ordering-fix arch/i386/pci/legacy.c
--- 25/arch/i386/pci/legacy.c~pci-init-ordering-fix Tue Jun 10 15:46:35 2003
+++ 25-akpm/arch/i386/pci/legacy.c Tue Jun 10 15:46:47 2003
@@ -65,4 +65,4 @@ static int __init pci_legacy_init(void)
return 0;
}
-subsys_initcall(pci_legacy_init);
+arch_initcall(pci_legacy_init);
_
-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/