On Monday 04 February 2008 11:18:09 am Linus Torvalds wrote:
On Mon, 4 Feb 2008, Bjorn Helgaas wrote:
I think the problem here is that the PCI BAR is bigger and spans the region reported by ACPI:
Ok, then it doesn't help that it's not busy.
In that case, the only real fix is to simply do the ACPI reservations *after* PCI probing. Which is what it should have done to begin with.
I'm sure you're right, but I don't understand why yet. Here's what I think is happening; please correct me where I'm going wrong:
1) enumerate PNP & ACPI devices 2) initialize PNP & ACPI drivers 2a) register ACPI PCI root bridge driver, which enumerates PCI devices behind the bridge 2b) register PNP system driver and reserve resources (this is where the current quirk skips some reservations) 3) initialize PCI drivers 3a) register intel8x0 sound driver and reserve conflicting resources
I really don't want to use the earlier quirk that scanned PCI devices from a PNP quirk. I think that's just wrong because PNP (which conceptually includes ACPI) is what tells us about PCI root bridges.
So? Do the bridge listing separately from resource marking. Why tie the two together? They have absolutely *nothing* to do with each other.
The fact is, scanning devices should happen first. And AFTER the device tree is scanned, we can then safely add all the special resources that don't show up as normal devices.
I think you're suggesting that we should do 2a first, to enumerate all PCI devices, and only later do 2b. But I don't know how to accomplish that cleanly.
It does happen in that order today, but only because the ACPI drivers are registered before the PNP drivers. I think that's an artificial distinction, so I don't want to rely on it. If the PCI bridge driver became a PNP driver, we could use link ordering to make sure it still came first, although that seems a little fragile to me.
Bjorn