On Wednesday 14 January 2009 02:12:06 am Yinghai Lu wrote: > On Tue, Jan 13, 2009 at 4:20 PM, Bjorn Helgaas <bjorn.helgaas@xxxxxx> wrote: > > The early "dump PCI config space" code skips many multi-function devices. > > This patch fixes that, so it dumps all devices in PCI domain 0. > > > > We should not skip the rest of the device if CLASS_REVISION is 0xffffffff. > > Often multi-function devices have gaps in the function ID space, e.g., > > 1c.0 and 1c.2 exist but 1c.1 doesn't. The CLASS_REVISION of the non- > > existent 1c.1 function will appear to be 0xffffffff. > > > > We should only look at the HEADER_TYPE of function zero. Often the > > "multi-function" is set in function zero, but not in other functions. > > > > Signed-off-by: Bjorn Helgaas <bjorn.helgaas@xxxxxx> > > --- > > arch/x86/pci/early.c | 17 +++++++++-------- > > 1 files changed, 9 insertions(+), 8 deletions(-) > > > > diff --git a/arch/x86/pci/early.c b/arch/x86/pci/early.c > > index f6adf2c..db7def6 100644 > > --- a/arch/x86/pci/early.c > > +++ b/arch/x86/pci/early.c > > @@ -96,18 +96,19 @@ void early_dump_pci_devices(void) > > for (func = 0; func < 8; func++) { > > u32 class; > > u8 type; > > + > > class = read_pci_config(bus, slot, func, > > PCI_CLASS_REVISION); > > - if (class == 0xffffffff) > > - break; > > - > > - early_dump_pci_device(bus, slot, func); > > + if (class != 0xffffffff) > > + early_dump_pci_device(bus, slot, func); > > > > - /* No multi-function device? */ > > - type = read_pci_config_byte(bus, slot, func, > > + if (func == 0) { > > + type = read_pci_config_byte(bus, slot, > > + func, > > PCI_HEADER_TYPE); > > - if (!(type & 0x80)) > > - break; > > + if (!(type & 0x80)) > > + break; > > + } > > } > > } > > } > > it seems you will do extra read_pci_config_byte(,,,_TYPE) when func = > 0, and class = 0xffffffff. You're right. I'll fix that. Thanks! 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