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

[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