[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