[U-Boot] [PATCH v2 07/18] efi_loader: efi_disk: use efi_add_protocol

Simon Glass sjg at chromium.org
Fri Nov 17 14:06:38 UTC 2017


On 12 November 2017 at 07:02, Heinrich Schuchardt <xypron.glpk at gmx.de> wrote:
> Use efi_add_protocol to install protocols.
>
> Signed-off-by: Heinrich Schuchardt <xypron.glpk at gmx.de>
> ---
> v2
>         no change
> ---
>  lib/efi_loader/efi_disk.c | 39 +++++++++++++++++++++++----------------
>  1 file changed, 23 insertions(+), 16 deletions(-)

Reviewed-by: Simon Glass <sjg at chromium.org>

See below.

>
> diff --git a/lib/efi_loader/efi_disk.c b/lib/efi_loader/efi_disk.c
> index c6f0d732c1..1d6cf3122f 100644
> --- a/lib/efi_loader/efi_disk.c
> +++ b/lib/efi_loader/efi_disk.c
> @@ -213,33 +213,40 @@ static void efi_disk_add_dev(const char *name,
>                              unsigned int part)
>  {
>         struct efi_disk_obj *diskobj;
> +       efi_status_t ret;
>
>         /* Don't add empty devices */
>         if (!desc->lba)
>                 return;
>
>         diskobj = calloc(1, sizeof(*diskobj));
> -       if (!diskobj) {
> -               printf("ERROR: Out of memory\n");
> -               return;
> -       }
> +       if (!diskobj)
> +               goto out_of_memory;
> +
> +       /* Hook up to the device list */
> +       list_add_tail(&diskobj->parent.link, &efi_obj_list);
>
>         /* Fill in object data */
>         diskobj->dp = efi_dp_from_part(desc, part);
>         diskobj->part = part;
> -       diskobj->parent.protocols[0].guid = &efi_block_io_guid;
> -       diskobj->parent.protocols[0].protocol_interface = &diskobj->ops;
> -       diskobj->parent.protocols[1].guid = &efi_guid_device_path;
> -       diskobj->parent.protocols[1].protocol_interface = diskobj->dp;
> +       diskobj->parent.handle = diskobj;
> +       ret = efi_add_protocol(diskobj->parent.handle, &efi_block_io_guid,
> +                              &diskobj->ops);
> +       if (ret != EFI_SUCCESS)
> +               goto out_of_memory;
> +       ret = efi_add_protocol(diskobj->parent.handle, &efi_guid_device_path,
> +                              diskobj->dp);
> +       if (ret != EFI_SUCCESS)
> +               goto out_of_memory;
>         if (part >= 1) {
>                 diskobj->volume = efi_simple_file_system(desc, part,
>                                                          diskobj->dp);
> -               diskobj->parent.protocols[2].guid =
> -                       &efi_simple_file_system_protocol_guid;
> -               diskobj->parent.protocols[2].protocol_interface =
> -                       diskobj->volume;
> +               ret = efi_add_protocol(diskobj->parent.handle,
> +                                      &efi_simple_file_system_protocol_guid,
> +                                      &diskobj->volume);
> +               if (ret != EFI_SUCCESS)
> +                       goto out_of_memory;
>         }
> -       diskobj->parent.handle = diskobj;
>         diskobj->ops = block_io_disk_template;
>         diskobj->ifname = if_typename;
>         diskobj->dev_index = dev_index;
> @@ -253,9 +260,9 @@ static void efi_disk_add_dev(const char *name,
>         diskobj->media.io_align = desc->blksz;
>         diskobj->media.last_block = desc->lba - offset;
>         diskobj->ops.media = &diskobj->media;
> -
> -       /* Hook up to the device list */
> -       list_add_tail(&diskobj->parent.link, &efi_obj_list);
> +       return;
> +out_of_memory:
> +       printf("ERROR: Out of memory\n");

Can we not return this error?

>  }
>
>  static int efi_disk_create_eltorito(struct blk_desc *desc,
> --
> 2.15.0
>


More information about the U-Boot mailing list