[U-Boot] [PATCH 2/6] pci: Check ops before using them for config space access

Bin Meng bmeng.cn at gmail.com
Tue Sep 25 15:25:34 UTC 2018


Hi Marek,

On Sat, Sep 22, 2018 at 7:00 AM Marek Vasut <marek.vasut at gmail.com> wrote:
>
> The code fails to check if ops is non-NULL before using it's members.
> Add the missing check and while at it, flip the condition to make it
> more obvious what is actually happening.
>

Though adding the NULL pointer check makes the codes more robust, I
would like to know with what calling sequence current codes are
broken? I did a grep and looks every PCI controller driver registers a
non-NULL dm_pci_ops so the ops can't be NULL, which means adding the
check seems unnecessary.

> Signed-off-by: Marek Vasut <marek.vasut+renesas at gmail.com>
> Cc: Simon Glass <sjg at chromium.org>
> Cc: Tom Rini <trini at konsulko.com>
> ---
>  drivers/pci/pci-uclass.c | 12 ++++++------
>  1 file changed, 6 insertions(+), 6 deletions(-)
>
> diff --git a/drivers/pci/pci-uclass.c b/drivers/pci/pci-uclass.c
> index eb118f3496..de523a76ad 100644
> --- a/drivers/pci/pci-uclass.c
> +++ b/drivers/pci/pci-uclass.c
> @@ -241,9 +241,9 @@ int pci_bus_write_config(struct udevice *bus, pci_dev_t bdf, int offset,
>         struct dm_pci_ops *ops;
>
>         ops = pci_get_ops(bus);
> -       if (!ops->write_config)
> -               return -ENOSYS;
> -       return ops->write_config(bus, bdf, offset, value, size);
> +       if (ops && ops->write_config)
> +               return ops->write_config(bus, bdf, offset, value, size);
> +       return -ENOSYS;
>  }
>
>  int pci_bus_clrset_config32(struct udevice *bus, pci_dev_t bdf, int offset,
> @@ -321,9 +321,9 @@ int pci_bus_read_config(struct udevice *bus, pci_dev_t bdf, int offset,
>         struct dm_pci_ops *ops;
>
>         ops = pci_get_ops(bus);
> -       if (!ops->read_config)
> -               return -ENOSYS;
> -       return ops->read_config(bus, bdf, offset, valuep, size);
> +       if (ops && ops->read_config)
> +               return ops->read_config(bus, bdf, offset, valuep, size);
> +       return -ENOSYS;
>  }
>
>  int pci_read_config(pci_dev_t bdf, int offset, unsigned long *valuep,
> --

Regards,
Bin


More information about the U-Boot mailing list