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. YH > > -- 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