On Wed, 12 Sep 2007 16:54:08 +0100 (BST), "Maciej W. Rozycki"
> 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.