[PATCH 12/14] bloblist: Reduce bloblist header size

Jose Marinho Jose.Marinho at arm.com
Wed Aug 2 12:15:44 CEST 2023



> -----Original Message-----
> From: Simon Glass <sjg at chromium.org>
> Sent: Tuesday, July 25, 2023 10:36 PM
> To: U-Boot Mailing List <u-boot at lists.denx.de>
> Cc: Ilias Apalodimas <ilias.apalodimas at linaro.org>; Tom Rini
> <trini at konsulko.com>; Julius Werner <jwerner at chromium.org>; Dan Handley
> <Dan.Handley at arm.com>; Jose Marinho <Jose.Marinho at arm.com>; Simon
> Glass <sjg at chromium.org>; Bin Meng <bmeng.cn at gmail.com>; Nikhil M Jain <n-
> jain1 at ti.com>
> Subject: [PATCH 12/14] bloblist: Reduce bloblist header size
> 
> The v0.9 spec provides for a 16-byte header with fewer fields. Update the
> implementation to match this.
> 
> This also adds an alignment field.
> 
> Signed-off-by: Simon Glass <sjg at chromium.org>
> ---
> 
>  include/bloblist.h | 26 +++++++++++++-------------
>  test/bloblist.c    |  6 +++---
>  2 files changed, 16 insertions(+), 16 deletions(-)
> 
> diff --git a/include/bloblist.h b/include/bloblist.h index
> d1e52cf888f..13b619cd019 100644
> --- a/include/bloblist.h
> +++ b/include/bloblist.h
> @@ -150,30 +150,30 @@ enum bloblist_tag_t {
>   * from the last.
>   *
>   * @magic: BLOBLIST_MAGIC
> + * @chksum: checksum for the entire bloblist allocated area. Since any of the
> + *	blobs can be altered after being created, this checksum is only valid
> + *	when the bloblist is finalised before jumping to the next stage of boot.
> + *	This is the value needed to make all chechksummed bytes sum to 0
>   * @version: BLOBLIST_VERSION
>   * @hdr_size: Size of this header, normally sizeof(struct bloblist_hdr). The
>   *	first bloblist_rec starts at this offset from the start of the header
> - * @size: Total size of the bloblist (non-zero if valid) including this header.
> - *	The bloblist extends for this many bytes from the start of this header.
> - *	When adding new records, the bloblist can grow up to this size.
> + * @align_log2: Power of two of the maximum alignment required by this
> + list
>   * @alloced: Total size allocated so far for this bloblist. This starts out as
>   *	sizeof(bloblist_hdr) since we need at least that much space to store a
>   *	valid bloblist
> - * @chksum: checksum for the entire bloblist allocated area. Since any of the
> - *	blobs can be altered after being created, this checksum is only valid
> - *	when the bloblist is finalised before jumping to the next stage of boot.
> - *	This is the value needed to make all checksummed bytes sum to 0
> + * @size: Total size of the bloblist (non-zero if valid) including this header.
> + *	The bloblist extends for this many bytes from the start of this header.
> + *	When adding new records, the bloblist can grow up to this size.
>   */
>  struct bloblist_hdr {
>  	u32 magic;
> -	u32 version;
> -	u32 hdr_size;
> -	u32 _flags;
> +	u8 chksum;
> +	u8 version;
> +	u8 hdr_size;
> +	u8 align_log2;
> 
> -	u32 size;
>  	u32 alloced;
> -	u32 _spare;
> -	u32 chksum;
> +	u32 size;
>  };

Being (overly) cautious, does it make sense for this struct to be __packed?

> 
>  /**
> diff --git a/test/bloblist.c b/test/bloblist.c index c1719c2e384..5801160621a
> 100644
> --- a/test/bloblist.c
> +++ b/test/bloblist.c
> @@ -78,7 +78,7 @@ static int bloblist_test_init(struct unit_test_state *uts)
>  	ut_asserteq(-EPROTONOSUPPORT, bloblist_check(TEST_ADDR,
>  						     TEST_BLOBLIST_SIZE));
> 
> -	ut_asserteq(-ENOSPC, bloblist_new(TEST_ADDR, 0x10));
> +	ut_asserteq(-ENOSPC, bloblist_new(TEST_ADDR, 0xc));
>  	ut_asserteq(-EFAULT, bloblist_new(1, TEST_BLOBLIST_SIZE));
>  	ut_assertok(bloblist_new(TEST_ADDR, TEST_BLOBLIST_SIZE));
> 
> @@ -261,8 +261,8 @@ static int bloblist_test_cmd_info(struct unit_test_state
> *uts)
>  	run_command("bloblist info", 0);
>  	ut_assert_nextline("base:     %lx", (ulong)map_to_sysmem(hdr));
>  	ut_assert_nextline("size:     400    1 KiB");
> -	ut_assert_nextline("alloced:  58     88 Bytes");
> -	ut_assert_nextline("free:     3a8    936 Bytes");
> +	ut_assert_nextline("alloced:  48     72 Bytes");
> +	ut_assert_nextline("free:     3b8    952 Bytes");
>  	ut_assert_console_end();
>  	ut_unsilence_console(uts);
> 
> --
> 2.41.0.487.g6d72f3e995-goog



More information about the U-Boot mailing list