Hi Ilias, On Thu, Dec 28, 2023 at 11:32 AM Ilias Apalodimas <ilias.apalodi...@linaro.org> wrote: > > Hi Raymond, > > On Wed, 27 Dec 2023 at 23:08, Raymond Mao <raymond....@linaro.org> wrote: > > > > From: Simon Glass <s...@chromium.org> > > > > Rather than setting the alignment using the header size, add an entirely > > new entry to cover the gap left by the alignment. > > > > Signed-off-by: Simon Glass <s...@chromium.org> > > Co-developed-by: Raymond Mao <raymond....@linaro.org> > > Signed-off-by: Raymond Mao <raymond....@linaro.org> > > Reviewed-by: Simon Glass <s...@chromium.org> > > --- > > common/bloblist.c | 23 +++++++++++++++++++---- > > 1 file changed, 19 insertions(+), 4 deletions(-) > > > > diff --git a/common/bloblist.c b/common/bloblist.c > > index 705d9c6ae9..73dbbc01c0 100644 > > --- a/common/bloblist.c > > +++ b/common/bloblist.c > > @@ -142,7 +142,7 @@ static int bloblist_addrec(uint tag, int size, int > > align_log2, > > { > > struct bloblist_hdr *hdr = gd->bloblist; > > struct bloblist_rec *rec; > > - int data_start, new_alloced; > > + int data_start, aligned_start, new_alloced; > > > > if (!align_log2) > > align_log2 = BLOBLIST_ALIGN_LOG2; > > @@ -151,10 +151,25 @@ static int bloblist_addrec(uint tag, int size, int > > align_log2, > > data_start = map_to_sysmem(hdr) + hdr->alloced + sizeof(*rec); > > > > /* Align the address and then calculate the offset from ->alloced */ > > - data_start = ALIGN(data_start, 1U << align_log2) - > > map_to_sysmem(hdr); > > + aligned_start = ALIGN(data_start, 1U << align_log2) - data_start; > > + > > + /* If we need to create a dummy record, create it */ > > + if (aligned_start) { > > + int void_size = aligned_start - sizeof(*rec); > > + struct bloblist_rec *vrec; > > + int ret; > > + > > + ret = bloblist_addrec(BLOBLISTT_VOID, void_size, 0, &vrec); > > I just noticed the 'BLOBLISTT'. Is that on purpose? or a typo?
It means 'bloblist tag' > > > + if (ret) > > + return log_msg_ret("void", ret); > > + > > + /* start the record after that */ > > + data_start = map_to_sysmem(hdr) + hdr->alloced + > > sizeof(*vrec); > > + } > > > > /* Calculate the new allocated total */ > > - new_alloced = data_start + ALIGN(size, 1U << align_log2); > > + new_alloced = data_start - map_to_sysmem(hdr) + > > + ALIGN(size, 1U << align_log2); > > So, wouldn't it make more sense to add the dummy record and align the > whole thing *after* we've added the entry? > Doing it like this might leave the last entry on an unaligned boundary, no? I will let Raymond respond as I'm not sure what this means. > > Thanks > /Ilias > > > > if (new_alloced > hdr->size) { > > log_err("Failed to allocate %x bytes size=%x, need > > size=%x\n", > > @@ -164,7 +179,7 @@ static int bloblist_addrec(uint tag, int size, int > > align_log2, > > rec = (void *)hdr + hdr->alloced; > > > > rec->tag = tag; > > - rec->hdr_size = data_start - hdr->alloced; > > + rec->hdr_size = sizeof(struct bloblist_rec); > > rec->size = size; > > > > /* Zero the record data */ > > -- > > 2.25.1 > > Regards, Simon