On Thursday 01 April 2010 01:30:14 pm Ira W. Snyder wrote: > On Thu, Apr 01, 2010 at 12:54:37PM -0600, Bjorn Helgaas wrote: > > On Thursday 01 April 2010 12:15:49 pm Yinghai Lu wrote: > > > On Wed, Mar 31, 2010 at 3:56 PM, Ira W. Snyder <iws@xxxxxxxxxxxxxxxx> wrote: > > > > On Wed, Mar 31, 2010 at 03:32:09PM -0600, Bjorn Helgaas wrote: > > > >> On Wednesday 31 March 2010 12:45:14 pm Ira W. Snyder wrote: > > > >> > On Wed, Mar 31, 2010 at 12:13:46PM -0600, Bjorn Helgaas wrote: > > > >> > > On Wednesday 31 March 2010 10:38:42 am Ira W. Snyder wrote: > > > >> > > > >> > > The CNB20LE might also be used in systems that *do* have ACPI, and in > > > >> > > that case, I think we should use ACPI rather than read the info out of > > > >> > > the hardware. I expect that's what Windows will do, and Linux should > > > >> > > do the same as Windows when it's practical. Also, that's what the BIOS > > > >> > > writers expect the OS to do, and _CRS is the logical place for them to > > > >> > > put platform-specific workarounds. > > > >> > > > > >> > Is there any way to detect if we do have ACPI and shouldn't run this > > > >> > quirk? How? > > > >> > > > >> Probably check "acpi_disabled". > > > >> > > > > > > > > Ok, I'll give this a shot. > > > > > > do not need that. bus_numa.c already did that check for you. > > > > > > void x86_pci_root_bus_res_quirks(struct pci_bus *b) > > > { > > > int i; > > > int j; > > > struct pci_root_info *info; > > > > > > /* don't go for it if _CRS is used already */ > > > if (b->resource[0] != &ioport_resource || > > > b->resource[1] != &iomem_resource) > > > return; > > > > Uh, ok. I think that's a pretty non-obvious connection, but I suppose > > it does work. I'd rather write code that says what you mean, rather > > than relying on a side-effect of something else. > > > > In my newer patch, I put a comment about this. > > I don't know the ACPI _CRS code nearly as well as both of you. If a BIOS > from 1999 (very old, but that's the date on mine, IIRC) provided an ACPI > _CRS table, would you use it to determine host bridge windows? > > What I'm wondering is if the code: > > if (!acpi_disabled) > return; > > at the beginning of the cnb20le_res() function would still exit the > function in the case where the system: > 1) has a working ACPI implementation > 2) does not have an ACPI _CRS table > > I think that we would exit the function early, but fail to read the > bridge windows. This means that PCI hotplug would not work on this > system. > > Is the ACPI _CRS optional or mandatory? If it is optional, then I think > Yinghai's solution is better. That is what I did in my v2 patch. You're right, acpi_disabled isn't the right thing in this case, because (regrettably) the _CRS code is optional. We should have used it from the beginning, but Linux was just late to the party, and it's probably too risky now to change it for all the old boxes. Bjorn -- To unsubscribe from this list: send the line "unsubscribe linux-pci" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html