[U-Boot] [PATCH 03/10] dm: pci: Tidy up auto-config error handling

Bin Meng bmeng.cn at gmail.com
Mon Sep 14 14:15:43 CEST 2015


On Wed, Sep 9, 2015 at 7:52 AM, Simon Glass <sjg at chromium.org> wrote:
> When the auto-configuration process fails for a device (generally due to
> lack of memory) we should return the error correctly so that we don't
> continue to try memory allocations which will fail.
>
> Adjust the code to check for errors and abort if something goes wrong.
>
> Signed-off-by: Simon Glass <sjg at chromium.org>
> ---
>
>  drivers/pci/pci-uclass.c | 15 ++++++++++++---
>  1 file changed, 12 insertions(+), 3 deletions(-)
>
> diff --git a/drivers/pci/pci-uclass.c b/drivers/pci/pci-uclass.c
> index b25298f..437c81a 100644
> --- a/drivers/pci/pci-uclass.c
> +++ b/drivers/pci/pci-uclass.c
> @@ -381,9 +381,13 @@ int pci_auto_config_devices(struct udevice *bus)
>              !ret && dev;
>              ret = device_find_next_child(&dev)) {
>                 unsigned int max_bus;
> +               int ret;
>
>                 debug("%s: device %s\n", __func__, dev->name);
> -               max_bus = pciauto_config_device(hose, pci_get_bdf(dev));
> +               ret = pciauto_config_device(hose, pci_get_bdf(dev));
> +               if (ret < 0)
> +                       return ret;
> +               max_bus = ret;
>                 sub_bus = max(sub_bus, max_bus);
>         }
>         debug("%s: done\n", __func__);
> @@ -757,6 +761,8 @@ static int pci_uclass_post_probe(struct udevice *bus)
>
>  #ifdef CONFIG_PCI_PNP
>         ret = pci_auto_config_devices(bus);
> +       if (ret < 0)
> +               return ret;
>  #endif
>
>  #if defined(CONFIG_X86) && defined(CONFIG_HAVE_FSP)
> @@ -773,11 +779,14 @@ static int pci_uclass_post_probe(struct udevice *bus)
>          * Note we only call this 1) after U-Boot is relocated, and 2)
>          * root bus has finished probing.
>          */
> -       if ((gd->flags & GD_FLG_RELOC) && (bus->seq == 0))
> +       if ((gd->flags & GD_FLG_RELOC) && (bus->seq == 0)) {
>                 ret = fsp_init_phase_pci();
> +               if (ret)
> +                       return ret;
> +       }
>  #endif
>
> -       return ret < 0 ? ret : 0;
> +       return 0;
>  }
>
>  static int pci_uclass_child_post_bind(struct udevice *dev)
> --

Reviewed-by: Bin Meng <bmeng.cn at gmail.com>


More information about the U-Boot mailing list