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);

Reply via email to