Re: [PATCH 1/3] PCI/x86: make early dump handle multi-function devices

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



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

[Index of Archives]     [DMA Engine]     [Linux Coverity]     [Linux USB]     [Video for Linux]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]     [Greybus]

  Powered by Linux