On Wed, 12 Sep 2007 16:54:08 +0100 (BST), "Maciej W. Rozycki" <macro@xxxxxxxxxxxxxx> wrote: > I gather the problem is ide_probe_legacy() is called too early for PCI to > have been initialised. With the old code ide_probe_legacy() called > pci_get_class(), which in turn triggered PCI initialisation, which enabled > interrupts prematurely and the failure scenario happened. To rectify Ralf > resurrected yet older code that reserved the legacy ports unconditionally. > You have put the code that calls pci_get_class() back and introduced this > call to no_pci_devices() beforehand. Please correct me if I have been > wrong anywhere here. Right. That's exactly what I did. > Now because at the point ide_probe_legacy() is called, PCI has not been > initialised yet, no_pci_devices() returns true and calls to > pci_get_class() are skipped preventing PCI initialisation from triggering > at this point. But the end result is they are not going to be called, > because if they were, it would mean no_pci_devices() had returned false > and would have been unnecessary in the first place. The pci_get_class() failure was happened only if ide_probe_legacy() was called too early. That can happen if you specified some IDE boot options, such as "idebus=" option. So if you do not add any ide boot option, there should be no problem. If you meant "ide_probe_legacy() has been broken with ide boot options for long years", I agree. And my recent patch is not to solve this problem. Just avoid adding legacy ide0/ide1 unconditionally in normal usage. > I hope I have been clearer now. Thank you! --- Atsushi Nemoto