On Thu, 13 Sep 2007, Atsushi Nemoto wrote:
> > Not quite so. The test for the PCI-(E)ISA bridge is there so that they
> > are handled. Now I gather the use of no_pci_devices() in
> > ide_probe_legacy() effectively disables the test entirely (thus making it
> > a candidate for removal). Or am I missing something?
> Well, I missed your point... please elaborate?
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.
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.
I hope I have been clearer now.