On Wednesday, February 23, 2011 03:08:10 am Jan Beulich wrote: > On various newer Intel systems the PCI bus(ses) the non-core devices > live on aren't getting announced by ACPI except through the bus range > covered by mmconfig. At least the i7core-edac driver depends on these > devices getting detected. I think you're saying: - the PCI host bridge has a _CRS method that reports the downstream bus number range - there are downstream devices on a bus X outside that _CRS range - the MCFG table has an entry that covers bus X What are these downstream devices? Might the BIOS be intentionally excluding them from PCI discovery so it can use them for its own purposes, e.g., things used by SMM code or exposed via an ACPI namespace device? If these devices are really intended for PCI discovery by the OS, the fact that the _CRS range excludes the bus sounds like a simple BIOS defect, and the workaround you propose feels like an ad hoc strategy that could be fragile. If the BIOS is intentionally hiding the devices by excluding the bus from the _CRS range, I think the BIOS could (and probably should) also exclude the bus from the ranges in the MCFG table, and then this fix would fail. Bjorn > Mauro, could you check whether with this change the Xeon 55xx hack in > that driver can go away altogether, and with it the bogus exporting of > pcibios_scan_specific_bus()? > > Signed-off-by: Jan Beulich <jbeulich@xxxxxxxxxx> > Cc: Mauro Carvalho Chehab <mchehab@xxxxxxxxxx> > Cc: Aristeu Sergio <arozansk@xxxxxxxxxx> > > --- > arch/x86/pci/mmconfig-shared.c | 10 ++++++++++ > 1 file changed, 10 insertions(+) > > --- 2.6.38-rc6/arch/x86/pci/mmconfig-shared.c > +++ 2.6.38-rc6-x86-mmconfig-last-bus/arch/x86/pci/mmconfig-shared.c > @@ -606,6 +606,16 @@ static void __init __pci_mmcfg_init(int > if (list_empty(&pci_mmcfg_list)) > return; > > + if (pcibios_last_bus < 0) { > + const struct pci_mmcfg_region *cfg; > + > + list_for_each_entry(cfg, &pci_mmcfg_list, list) { > + if (cfg->segment) > + break; > + pcibios_last_bus = cfg->end_bus; > + } > + } > + > if (pci_mmcfg_arch_init()) > pci_probe = (pci_probe & ~PCI_PROBE_MASK) | PCI_PROBE_MMCONF; > else { > > > > -- > 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 > -- 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