On Sat, 14 Sept 2024 at 20:01, Heinrich Schuchardt <xypron.g...@gmx.de> wrote: > > 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.g...@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.
Will do. Thanks. -sughosh > > 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) > > { >