Hi Sughosh, On Tue May 20, 2025 at 3:06 PM EEST, Sughosh Ganu wrote: > There is no need to have two separate API's for freeing up memory. Use > a single API lmb_free() to achieve this. > > Signed-off-by: Sughosh Ganu <sughosh.g...@linaro.org>
Reviewed-by: Ilias Apalodimas <ilias.apalodi...@linaro.org> > --- > Changes since V1: None > > boot/image-fdt.c | 2 +- > cmd/load.c | 2 +- > include/lmb.h | 6 ++--- > lib/efi_loader/efi_memory.c | 6 ++--- > lib/lmb.c | 8 +----- > test/lib/lmb.c | 49 +++++++++++++++++++------------------ > 6 files changed, 33 insertions(+), 40 deletions(-) > > diff --git a/boot/image-fdt.c b/boot/image-fdt.c > index ff27a31ae2e..1a6db149021 100644 > --- a/boot/image-fdt.c > +++ b/boot/image-fdt.c > @@ -691,7 +691,7 @@ int image_setup_libfdt(struct bootm_headers *images, void > *blob, bool lmb) > > /* Delete the old LMB reservation */ > if (CONFIG_IS_ENABLED(LMB) && lmb) > - lmb_free(map_to_sysmem(blob), fdt_totalsize(blob)); > + lmb_free(map_to_sysmem(blob), fdt_totalsize(blob), LMB_NONE); > > ret = fdt_shrink_to_minimum(blob, 0); > if (ret < 0) > diff --git a/cmd/load.c b/cmd/load.c > index 569716607ff..9d94a884087 100644 > --- a/cmd/load.c > +++ b/cmd/load.c > @@ -191,7 +191,7 @@ static ulong load_serial(long offset) > dst = map_sysmem(store_addr, binlen); > memcpy(dst, binbuf, binlen); > unmap_sysmem(dst); > - lmb_free(store_addr, binlen); > + lmb_free(store_addr, binlen, LMB_NONE); > } > if ((store_addr) < start_addr) > start_addr = store_addr; > diff --git a/include/lmb.h b/include/lmb.h > index 29345d1fa50..c869744c99f 100644 > --- a/include/lmb.h > +++ b/include/lmb.h > @@ -142,16 +142,14 @@ phys_size_t lmb_get_free_size(phys_addr_t addr); > int lmb_is_reserved_flags(phys_addr_t addr, int flags); > > /** > - * lmb_free_flags() - Free up a region of memory > + * lmb_free() - Free up a region of memory > * @base: Base Address of region to be freed > * @size: Size of the region to be freed > * @flags: Memory region attributes > * > * Return: 0 on success, negative error code on failure. > */ > -long lmb_free_flags(phys_addr_t base, phys_size_t size, uint flags); > - > -long lmb_free(phys_addr_t base, phys_size_t size); > +long lmb_free(phys_addr_t base, phys_size_t size, u32 flags); > > void lmb_dump_all(void); > void lmb_dump_all_force(void); > diff --git a/lib/efi_loader/efi_memory.c b/lib/efi_loader/efi_memory.c > index 73e1eef5011..fd6aee21d36 100644 > --- a/lib/efi_loader/efi_memory.c > +++ b/lib/efi_loader/efi_memory.c > @@ -508,7 +508,7 @@ efi_status_t efi_allocate_pages(enum efi_allocate_type > type, > ret = efi_update_memory_map(efi_addr, pages, memory_type, true, false); > if (ret != EFI_SUCCESS) { > /* Map would overlap, bail out */ > - lmb_free_flags(addr, (u64)pages << EFI_PAGE_SHIFT, flags); > + lmb_free(addr, (u64)pages << EFI_PAGE_SHIFT, flags); > unmap_sysmem((void *)(uintptr_t)efi_addr); > return EFI_OUT_OF_RESOURCES; > } > @@ -548,8 +548,8 @@ efi_status_t efi_free_pages(uint64_t memory, efi_uintn_t > pages) > * been mapped with map_sysmem() from efi_allocate_pages(). Convert > * it back to an address LMB understands > */ > - status = lmb_free_flags(map_to_sysmem((void *)(uintptr_t)memory), len, > - LMB_NOOVERWRITE); > + status = lmb_free(map_to_sysmem((void *)(uintptr_t)memory), len, > + LMB_NOOVERWRITE); > if (status) > return EFI_NOT_FOUND; > > diff --git a/lib/lmb.c b/lib/lmb.c > index 4f3cf345984..c9526c3c578 100644 > --- a/lib/lmb.c > +++ b/lib/lmb.c > @@ -655,8 +655,7 @@ long lmb_add(phys_addr_t base, phys_size_t size) > return lmb_map_update_notify(base, size, LMB_MAP_OP_ADD, LMB_NONE); > } > > -long lmb_free_flags(phys_addr_t base, phys_size_t size, > - uint flags) > +long lmb_free(phys_addr_t base, phys_size_t size, u32 flags) > { > long ret; > > @@ -667,11 +666,6 @@ long lmb_free_flags(phys_addr_t base, phys_size_t size, > return lmb_map_update_notify(base, size, LMB_MAP_OP_FREE, flags); > } > > -long lmb_free(phys_addr_t base, phys_size_t size) > -{ > - return lmb_free_flags(base, size, LMB_NONE); > -} > - > static int _lmb_alloc_base(phys_size_t size, ulong align, > phys_addr_t *addr, u32 flags) > { > diff --git a/test/lib/lmb.c b/test/lib/lmb.c > index 8ce19efc854..94a335a4bb8 100644 > --- a/test/lib/lmb.c > +++ b/test/lib/lmb.c > @@ -182,7 +182,7 @@ static int test_multi_alloc(struct unit_test_state *uts, > const phys_addr_t ram, > ASSERT_LMB(mem_lst, used_lst, 0, 0, 2, > alloc_64k_addr - 8, 0x10000 + 8, ram_end - 8, 8, 0, 0); > > - ret = lmb_free(a, 4); > + ret = lmb_free(a, 4, LMB_NONE); > ut_asserteq(ret, 0); > ASSERT_LMB(mem_lst, used_lst, 0, 0, 2, > alloc_64k_addr - 8, 0x10000 + 8, ram_end - 8, 4, 0, 0); > @@ -191,12 +191,12 @@ static int test_multi_alloc(struct unit_test_state > *uts, const phys_addr_t ram, > ut_asserteq(a, a2); > ASSERT_LMB(mem_lst, used_lst, 0, 0, 2, > alloc_64k_addr - 8, 0x10000 + 8, ram_end - 8, 8, 0, 0); > - ret = lmb_free(a2, 4); > + ret = lmb_free(a2, 4, LMB_NONE); > ut_asserteq(ret, 0); > ASSERT_LMB(mem_lst, used_lst, 0, 0, 2, > alloc_64k_addr - 8, 0x10000 + 8, ram_end - 8, 4, 0, 0); > > - ret = lmb_free(b, 4); > + ret = lmb_free(b, 4, LMB_NONE); > ut_asserteq(ret, 0); > ASSERT_LMB(mem_lst, used_lst, 0, 0, 3, > alloc_64k_addr - 8, 4, alloc_64k_addr, 0x10000, > @@ -206,17 +206,17 @@ static int test_multi_alloc(struct unit_test_state > *uts, const phys_addr_t ram, > ut_asserteq(b, b2); > ASSERT_LMB(mem_lst, used_lst, 0, 0, 2, > alloc_64k_addr - 8, 0x10000 + 8, ram_end - 8, 4, 0, 0); > - ret = lmb_free(b2, 4); > + ret = lmb_free(b2, 4, LMB_NONE); > ut_asserteq(ret, 0); > ASSERT_LMB(mem_lst, used_lst, 0, 0, 3, > alloc_64k_addr - 8, 4, alloc_64k_addr, 0x10000, > ram_end - 8, 4); > > - ret = lmb_free(c, 4); > + ret = lmb_free(c, 4, LMB_NONE); > ut_asserteq(ret, 0); > ASSERT_LMB(mem_lst, used_lst, 0, 0, 2, > alloc_64k_addr - 8, 4, alloc_64k_addr, 0x10000, 0, 0); > - ret = lmb_free(d, 4); > + ret = lmb_free(d, 4, LMB_NONE); > ut_asserteq(ret, 0); > ASSERT_LMB(mem_lst, used_lst, 0, 0, 1, alloc_64k_addr, 0x10000, > 0, 0, 0, 0); > @@ -320,7 +320,7 @@ static int test_bigblock(struct unit_test_state *uts, > const phys_addr_t ram) > ASSERT_LMB(mem_lst, used_lst, ram, ram_size, 1, a, > big_block_size + 0x10000, 0, 0, 0, 0); > > - ret = lmb_free(a, big_block_size); > + ret = lmb_free(a, big_block_size, LMB_NONE); > ut_asserteq(ret, 0); > ASSERT_LMB(mem_lst, used_lst, ram, ram_size, 1, alloc_64k_addr, 0x10000, > 0, 0, 0, 0); > @@ -392,12 +392,12 @@ static int test_noreserved(struct unit_test_state *uts, > const phys_addr_t ram, > - alloc_size_aligned, alloc_size, 0, 0); > } > /* and free them */ > - ret = lmb_free(b, alloc_size); > + ret = lmb_free(b, alloc_size, LMB_NONE); > ut_asserteq(ret, 0); > ASSERT_LMB(mem_lst, used_lst, ram, ram_size, 1, > ram + ram_size - alloc_size_aligned, > alloc_size, 0, 0, 0, 0); > - ret = lmb_free(a, alloc_size); > + ret = lmb_free(a, alloc_size, LMB_NONE); > ut_asserteq(ret, 0); > ASSERT_LMB(mem_lst, used_lst, ram, ram_size, 0, 0, 0, 0, 0, 0, 0); > > @@ -408,7 +408,7 @@ static int test_noreserved(struct unit_test_state *uts, > const phys_addr_t ram, > ram + ram_size - alloc_size_aligned, > alloc_size, 0, 0, 0, 0); > /* and free it */ > - ret = lmb_free(b, alloc_size); > + ret = lmb_free(b, alloc_size, LMB_NONE); > ut_asserteq(ret, 0); > ASSERT_LMB(mem_lst, used_lst, ram, ram_size, 0, 0, 0, 0, 0, 0, 0); > > @@ -476,12 +476,12 @@ static int lib_test_lmb_at_0(struct unit_test_state > *uts) > ASSERT_LMB(mem_lst, used_lst, ram, ram_size, 1, a, ram_size - 4, > 0, 0, 0, 0); > /* check that this was an error by freeing b */ > - ret = lmb_free(b, 4); > + ret = lmb_free(b, 4, LMB_NONE); > ut_asserteq(ret, -1); > ASSERT_LMB(mem_lst, used_lst, ram, ram_size, 1, a, ram_size - 4, > 0, 0, 0, 0); > > - ret = lmb_free(a, ram_size - 4); > + ret = lmb_free(a, ram_size - 4, LMB_NONE); > ut_asserteq(ret, 0); > ASSERT_LMB(mem_lst, used_lst, ram, ram_size, 0, 0, 0, 0, 0, 0, 0); > > @@ -612,7 +612,7 @@ static int test_alloc_addr(struct unit_test_state *uts, > const phys_addr_t ram) > ut_asserteq(b, 0); > b = lmb_alloc_addr(alloc_addr_a, 0x2000, LMB_NONE); > ut_asserteq(b, 0); > - ret = lmb_free(alloc_addr_a, 0x2000); > + ret = lmb_free(alloc_addr_a, 0x2000, LMB_NONE); > ut_asserteq(ret, 0); > b = lmb_alloc_addr(alloc_addr_a, 0x1000, LMB_NOOVERWRITE); > ut_asserteq(b, 0); > @@ -620,7 +620,7 @@ static int test_alloc_addr(struct unit_test_state *uts, > const phys_addr_t ram) > ut_asserteq(b, -EEXIST); > b = lmb_alloc_addr(alloc_addr_a, 0x1000, LMB_NOOVERWRITE); > ut_asserteq(b, -EEXIST); > - ret = lmb_free(alloc_addr_a, 0x1000); > + ret = lmb_free(alloc_addr_a, 0x1000, LMB_NONE); > ut_asserteq(ret, 0); > > /* > @@ -642,9 +642,9 @@ static int test_alloc_addr(struct unit_test_state *uts, > const phys_addr_t ram) > ASSERT_LMB(mem_lst, used_lst, ram, ram_size, 2, alloc_addr_a, 0x1000, > alloc_addr_a + 0x4000, 0x1000, 0, 0); > > - ret = lmb_free(alloc_addr_a, 0x1000); > + ret = lmb_free(alloc_addr_a, 0x1000, LMB_NONE); > ut_asserteq(ret, 0); > - ret = lmb_free(alloc_addr_a + 0x4000, 0x1000); > + ret = lmb_free(alloc_addr_a + 0x4000, 0x1000, LMB_NOOVERWRITE); > ut_asserteq(ret, 0); > > /* > @@ -667,7 +667,7 @@ static int test_alloc_addr(struct unit_test_state *uts, > const phys_addr_t ram) > ASSERT_LMB(mem_lst, used_lst, ram, ram_size, 1, alloc_addr_a, 0x6000, > 0, 0, 0, 0); > > - ret = lmb_free(alloc_addr_a, 0x6000); > + ret = lmb_free(alloc_addr_a, 0x6000, LMB_NONE); > ut_asserteq(ret, 0); > > /* > @@ -689,9 +689,9 @@ static int test_alloc_addr(struct unit_test_state *uts, > const phys_addr_t ram) > ASSERT_LMB(mem_lst, used_lst, ram, ram_size, 2, alloc_addr_a, 0x1000, > alloc_addr_a + 0x4000, 0x1000, 0, 0); > > - ret = lmb_free(alloc_addr_a, 0x1000); > + ret = lmb_free(alloc_addr_a, 0x1000, LMB_NOOVERWRITE); > ut_asserteq(ret, 0); > - ret = lmb_free(alloc_addr_a + 0x4000, 0x1000); > + ret = lmb_free(alloc_addr_a + 0x4000, 0x1000, LMB_NOOVERWRITE); > ut_asserteq(ret, 0); > > /* reserve 3 blocks */ > @@ -732,7 +732,8 @@ static int test_alloc_addr(struct unit_test_state *uts, > const phys_addr_t ram) > 0, 0, 0, 0); > > /* free thge allocation from d */ > - ret = lmb_free(alloc_addr_c + 0x10000, ram_end - alloc_addr_c - > 0x10000); > + ret = lmb_free(alloc_addr_c + 0x10000, ram_end - alloc_addr_c - 0x10000, > + LMB_NONE); > ut_asserteq(ret, 0); > > /* allocate at 3 points in free range */ > @@ -741,7 +742,7 @@ static int test_alloc_addr(struct unit_test_state *uts, > const phys_addr_t ram) > ut_asserteq(d, 0); > ASSERT_LMB(mem_lst, used_lst, ram, ram_size, 2, ram, 0x18010000, > ram_end - 4, 4, 0, 0); > - ret = lmb_free(ram_end - 4, 4); > + ret = lmb_free(ram_end - 4, 4, LMB_NONE); > ut_asserteq(ret, 0); > ASSERT_LMB(mem_lst, used_lst, ram, ram_size, 1, ram, 0x18010000, > 0, 0, 0, 0); > @@ -750,7 +751,7 @@ static int test_alloc_addr(struct unit_test_state *uts, > const phys_addr_t ram) > ut_asserteq(d, 0); > ASSERT_LMB(mem_lst, used_lst, ram, ram_size, 2, ram, 0x18010000, > ram_end - 128, 4, 0, 0); > - ret = lmb_free(ram_end - 128, 4); > + ret = lmb_free(ram_end - 128, 4, LMB_NONE); > ut_asserteq(ret, 0); > ASSERT_LMB(mem_lst, used_lst, ram, ram_size, 1, ram, 0x18010000, > 0, 0, 0, 0); > @@ -759,13 +760,13 @@ static int test_alloc_addr(struct unit_test_state *uts, > const phys_addr_t ram) > ut_asserteq(d, 0); > ASSERT_LMB(mem_lst, used_lst, ram, ram_size, 1, ram, 0x18010004, > 0, 0, 0, 0); > - ret = lmb_free(alloc_addr_c + 0x10000, 4); > + ret = lmb_free(alloc_addr_c + 0x10000, 4, LMB_NONE); > ut_asserteq(ret, 0); > ASSERT_LMB(mem_lst, used_lst, ram, ram_size, 1, ram, 0x18010000, > 0, 0, 0, 0); > > /* allocate at the bottom a was assigned to ram at the top */ > - ret = lmb_free(ram, alloc_addr_a - ram); > + ret = lmb_free(ram, alloc_addr_a - ram, LMB_NONE); > ut_asserteq(ret, 0); > ASSERT_LMB(mem_lst, used_lst, ram, ram_size, 1, ram + 0x8000000, > 0x10010000, 0, 0, 0, 0);