[PATCH 01/16] lmb: add versions of the lmb API with flags
Heinrich Schuchardt
xypron.glpk at gmx.de
Sat Sep 14 16:30:37 CEST 2024
On 9/5/24 10:27, Sughosh Ganu wrote:
> The LMB module is to be used as a backend for allocating and freeing
> up memory requested from other modules like EFI. These memory requests
> are different from the typical LMB reservations in that memory
> required by the EFI module cannot be overwritten, or re-requested. Add
> versions of the LMB API functions with flags for allocating and
> freeing up memory. The caller can then use these API's for specifying
> the type of memory that is required. For now, these functions will be
> used by the EFI memory module.
>
> Signed-off-by: Sughosh Ganu <sughosh.ganu at linaro.org>
> ---
> include/lmb.h | 6 ++++++
> lib/lmb.c | 39 ++++++++++++++++++++++++++++++++++++++-
> 2 files changed, 44 insertions(+), 1 deletion(-)
>
> diff --git a/include/lmb.h b/include/lmb.h
> index fc2daaa7bf..45a06c3b99 100644
> --- a/include/lmb.h
> +++ b/include/lmb.h
> @@ -86,8 +86,13 @@ long lmb_reserve(phys_addr_t base, phys_size_t size);
> long lmb_reserve_flags(phys_addr_t base, phys_size_t size,
> enum lmb_flags flags);
> phys_addr_t lmb_alloc(phys_size_t size, ulong align);
> +phys_addr_t lmb_alloc_flags(phys_size_t size, ulong align, uint flags);
Please, provide Sphinx style function descriptions for the functions
that you are adding or changing.
Cf.
https://www.kernel.org/doc/html/latest/doc-guide/kernel-doc.html#function-documentation
Best regards
Heinrich
> phys_addr_t lmb_alloc_base(phys_size_t size, ulong align, phys_addr_t max_addr);
> +phys_addr_t lmb_alloc_base_flags(phys_size_t size, ulong align,
> + phys_addr_t max_addr, uint flags);
> phys_addr_t lmb_alloc_addr(phys_addr_t base, phys_size_t size);
> +phys_addr_t lmb_alloc_addr_flags(phys_addr_t base, phys_size_t size,
> + uint flags);
> phys_size_t lmb_get_free_size(phys_addr_t addr);
>
> /**
> @@ -103,6 +108,7 @@ phys_size_t lmb_get_free_size(phys_addr_t addr);
> int lmb_is_reserved_flags(phys_addr_t addr, int flags);
>
> long lmb_free(phys_addr_t base, phys_size_t size);
> +long lmb_free_flags(phys_addr_t base, phys_size_t size, uint flags);
>
> void lmb_dump_all(void);
> void lmb_dump_all_force(void);
> diff --git a/lib/lmb.c b/lib/lmb.c
> index 3ed570fb29..da6a1595cc 100644
> --- a/lib/lmb.c
> +++ b/lib/lmb.c
> @@ -479,7 +479,7 @@ long lmb_add(phys_addr_t base, phys_size_t size)
> return lmb_add_region(lmb_rgn_lst, base, size);
> }
>
> -long lmb_free(phys_addr_t base, phys_size_t size)
> +static long __lmb_free(phys_addr_t base, phys_size_t size)
> {
> struct lmb_region *rgn;
> struct alist *lmb_rgn_lst = &lmb.used_mem;
> @@ -530,6 +530,17 @@ long lmb_free(phys_addr_t base, phys_size_t size)
> rgn[i].flags);
> }
>
> +long lmb_free(phys_addr_t base, phys_size_t size)
> +{
> + return __lmb_free(base, size);
> +}
> +
> +long lmb_free_flags(phys_addr_t base, phys_size_t size,
> + __always_unused uint flags)
> +{
> + return __lmb_free(base, size);
> +}
> +
> long lmb_reserve_flags(phys_addr_t base, phys_size_t size, enum lmb_flags flags)
> {
> struct alist *lmb_rgn_lst = &lmb.used_mem;
> @@ -613,6 +624,12 @@ phys_addr_t lmb_alloc(phys_size_t size, ulong align)
> return lmb_alloc_base(size, align, LMB_ALLOC_ANYWHERE);
> }
>
> +phys_addr_t lmb_alloc_flags(phys_size_t size, ulong align, uint flags)
> +{
> + return __lmb_alloc_base(size, align, LMB_ALLOC_ANYWHERE,
> + flags);
> +}
> +
> phys_addr_t lmb_alloc_base(phys_size_t size, ulong align, phys_addr_t max_addr)
> {
> phys_addr_t alloc;
> @@ -626,6 +643,20 @@ phys_addr_t lmb_alloc_base(phys_size_t size, ulong align, phys_addr_t max_addr)
> return alloc;
> }
>
> +phys_addr_t lmb_alloc_base_flags(phys_size_t size, ulong align,
> + phys_addr_t max_addr, uint flags)
> +{
> + phys_addr_t alloc;
> +
> + alloc = __lmb_alloc_base(size, align, max_addr, flags);
> +
> + if (alloc == 0)
> + printf("ERROR: Failed to allocate 0x%lx bytes below 0x%lx.\n",
> + (ulong)size, (ulong)max_addr);
> +
> + return alloc;
> +}
> +
> static phys_addr_t __lmb_alloc_addr(phys_addr_t base, phys_size_t size,
> enum lmb_flags flags)
> {
> @@ -660,6 +691,12 @@ phys_addr_t lmb_alloc_addr(phys_addr_t base, phys_size_t size)
> return __lmb_alloc_addr(base, size, LMB_NONE);
> }
>
> +phys_addr_t lmb_alloc_addr_flags(phys_addr_t base, phys_size_t size,
> + uint flags)
> +{
> + return __lmb_alloc_addr(base, size, flags);
> +}
> +
> /* Return number of bytes from a given address that are free */
> phys_size_t lmb_get_free_size(phys_addr_t addr)
> {
More information about the U-Boot
mailing list