
Rather than exporting the internal details of lmb, create a struct which holds the lists.
Signed-off-by: Simon Glass sjg@chromium.org ---
include/lmb.h | 10 ++++++++- lib/lmb.c | 56 +++++++++++++++++++++++++---------------------- test/cmd/bdinfo.c | 8 +++---- 3 files changed, 43 insertions(+), 31 deletions(-)
diff --git a/include/lmb.h b/include/lmb.h index 25a984e14f3..19231439c34 100644 --- a/include/lmb.h +++ b/include/lmb.h @@ -13,7 +13,13 @@ * Copyright (C) 2001 Peter Bergner, IBM Corp. */
-struct alist; +#include <alist.h> + +struct lmb { + struct alist free_mem; + struct alist used_mem; +}; +
/** * enum lmb_flags - definition of memory region attributes @@ -121,6 +127,8 @@ int lmb_mem_regions_init(struct alist **mem_lst, struct alist **used_lst, */ void lmb_mem_regions_uninit(struct alist *mem_lst, struct alist *used_lst);
+struct lmb *lmb_get(void); + #endif /* __KERNEL__ */
#endif /* _LINUX_LMB_H */ diff --git a/lib/lmb.c b/lib/lmb.c index 97ea26b013f..c11ce308c5b 100644 --- a/lib/lmb.c +++ b/lib/lmb.c @@ -24,8 +24,7 @@ DECLARE_GLOBAL_DATA_PTR; #define LMB_ALLOC_ANYWHERE 0 #define LMB_ALIST_INITIAL_SIZE 4
-struct alist lmb_free_mem; -struct alist lmb_used_mem; +static struct lmb lmb;
static void lmb_dump_region(struct alist *lmb_rgn_lst, char *name) { @@ -50,8 +49,8 @@ static void lmb_dump_region(struct alist *lmb_rgn_lst, char *name) void lmb_dump_all_force(void) { printf("lmb_dump_all:\n"); - lmb_dump_region(&lmb_free_mem, "memory"); - lmb_dump_region(&lmb_used_mem, "reserved"); + lmb_dump_region(&lmb.free_mem, "memory"); + lmb_dump_region(&lmb.used_mem, "reserved"); }
void lmb_dump_all(void) @@ -499,7 +498,7 @@ static long lmb_add_region_flags(struct alist *lmb_rgn_lst, phys_addr_t base, /* This routine may be called with relocation disabled. */ long lmb_add(phys_addr_t base, phys_size_t size, uint flags) { - struct alist *lmb_rgn_lst = &lmb_free_mem; + struct alist *lmb_rgn_lst = &lmb.free_mem;
return lmb_add_region_flags(lmb_rgn_lst, base, size, flags); } @@ -507,7 +506,7 @@ long lmb_add(phys_addr_t base, phys_size_t size, uint flags) long lmb_free(phys_addr_t base, phys_size_t size, uint flags) { struct lmb_region *rgn; - struct alist *lmb_rgn_lst = &lmb_used_mem; + struct alist *lmb_rgn_lst = &lmb.used_mem; phys_addr_t rgnbegin, rgnend; phys_addr_t end = base + size - 1; int i; @@ -557,7 +556,7 @@ long lmb_free(phys_addr_t base, phys_size_t size, uint flags)
long lmb_reserve(phys_addr_t base, phys_size_t size, uint flags) { - struct alist *lmb_rgn_lst = &lmb_used_mem; + struct alist *lmb_rgn_lst = &lmb.used_mem;
return lmb_add_region_flags(lmb_rgn_lst, base, size, flags); } @@ -589,10 +588,10 @@ static phys_addr_t __lmb_alloc_base(phys_size_t size, ulong align, long i, rgn; phys_addr_t base = 0; phys_addr_t res_base; - struct lmb_region *lmb_used = lmb_used_mem.data; - struct lmb_region *lmb_memory = lmb_free_mem.data; + struct lmb_region *lmb_used = lmb.used_mem.data; + struct lmb_region *lmb_memory = lmb.free_mem.data;
- for (i = lmb_free_mem.count - 1; i >= 0; i--) { + for (i = lmb.free_mem.count - 1; i >= 0; i--) { phys_addr_t lmbbase = lmb_memory[i].base; phys_size_t lmbsize = lmb_memory[i].size;
@@ -610,10 +609,10 @@ static phys_addr_t __lmb_alloc_base(phys_size_t size, ulong align, continue;
while (base && lmbbase <= base) { - rgn = lmb_overlaps_region(&lmb_used_mem, base, size); + rgn = lmb_overlaps_region(&lmb.used_mem, base, size); if (rgn < 0) { /* This area isn't reserved, take it */ - if (lmb_add_region_flags(&lmb_used_mem, base, + if (lmb_add_region_flags(&lmb.used_mem, base, size, flags) < 0) return 0; return base; @@ -651,10 +650,10 @@ static phys_addr_t __lmb_alloc_addr(phys_addr_t base, phys_size_t size, enum lmb_flags flags) { long rgn; - struct lmb_region *lmb_memory = lmb_free_mem.data; + struct lmb_region *lmb_memory = lmb.free_mem.data;
/* Check if the requested address is in one of the memory regions */ - rgn = lmb_overlaps_region(&lmb_free_mem, base, size); + rgn = lmb_overlaps_region(&lmb.free_mem, base, size); if (rgn >= 0) { /* * Check if the requested end address is in the same memory @@ -686,13 +685,13 @@ phys_size_t lmb_get_free_size(phys_addr_t addr) { int i; long rgn; - struct lmb_region *lmb_used = lmb_used_mem.data; - struct lmb_region *lmb_memory = lmb_free_mem.data; + struct lmb_region *lmb_used = lmb.used_mem.data; + struct lmb_region *lmb_memory = lmb.free_mem.data;
/* check if the requested address is in the memory regions */ - rgn = lmb_overlaps_region(&lmb_free_mem, addr, 1); + rgn = lmb_overlaps_region(&lmb.free_mem, addr, 1); if (rgn >= 0) { - for (i = 0; i < lmb_used_mem.count; i++) { + for (i = 0; i < lmb.used_mem.count; i++) { if (addr < lmb_used[i].base) { /* first reserved range > requested address */ return lmb_used[i].base - addr; @@ -704,8 +703,8 @@ phys_size_t lmb_get_free_size(phys_addr_t addr) } } /* if we come here: no reserved ranges above requested addr */ - return lmb_memory[lmb_free_mem.count - 1].base + - lmb_memory[lmb_free_mem.count - 1].size - addr; + return lmb_memory[lmb.free_mem.count - 1].base + + lmb_memory[lmb.free_mem.count - 1].size - addr; } return 0; } @@ -713,9 +712,9 @@ phys_size_t lmb_get_free_size(phys_addr_t addr) int lmb_is_reserved_flags(phys_addr_t addr, int flags) { int i; - struct lmb_region *lmb_used = lmb_used_mem.data; + struct lmb_region *lmb_used = lmb.used_mem.data;
- for (i = 0; i < lmb_used_mem.count; i++) { + for (i = 0; i < lmb.used_mem.count; i++) { phys_addr_t upper = lmb_used[i].base + lmb_used[i].size - 1; if ((addr >= lmb_used[i].base) && (addr <= upper)) @@ -760,14 +759,14 @@ int lmb_mem_regions_init(struct alist **mem_lst, struct alist **used_lst, { bool ret;
- ret = alist_init(&lmb_free_mem, sizeof(struct lmb_region), + ret = alist_init(&lmb.free_mem, sizeof(struct lmb_region), (uint)LMB_ALIST_INITIAL_SIZE); if (!ret) { log_debug("Unable to initialise the list for LMB free memory\n"); return -1; }
- ret = alist_init(&lmb_used_mem, sizeof(struct lmb_region), + ret = alist_init(&lmb.used_mem, sizeof(struct lmb_region), (uint)LMB_ALIST_INITIAL_SIZE); if (!ret) { log_debug("Unable to initialise the list for LMB used memory\n"); @@ -775,10 +774,10 @@ int lmb_mem_regions_init(struct alist **mem_lst, struct alist **used_lst, }
if (mem_lst) - *mem_lst = &lmb_free_mem; + *mem_lst = &lmb.free_mem;
if (used_lst) - *used_lst = &lmb_used_mem; + *used_lst = &lmb.used_mem;
if (!add_rsv_mem) return 0; @@ -829,3 +828,8 @@ int initr_lmb(void)
return ret; } + +struct lmb *lmb_get(void) +{ + return &lmb; +} diff --git a/test/cmd/bdinfo.c b/test/cmd/bdinfo.c index 3184aaf629f..e18e4701bbe 100644 --- a/test/cmd/bdinfo.c +++ b/test/cmd/bdinfo.c @@ -129,12 +129,12 @@ static int lmb_test_dump_region(struct unit_test_state *uts,
static int lmb_test_dump_all(struct unit_test_state *uts) { - extern struct alist lmb_free_mem; - extern struct alist lmb_used_mem; + struct lmb *lmb = lmb_get();
+ ut_assertnonnull(lmb); ut_assert_nextline("lmb_dump_all:"); - ut_assertok(lmb_test_dump_region(uts, &lmb_free_mem, "memory")); - ut_assertok(lmb_test_dump_region(uts, &lmb_used_mem, "reserved")); + ut_assertok(lmb_test_dump_region(uts, &lmb->free_mem, "memory")); + ut_assertok(lmb_test_dump_region(uts, &lmb->used_mem, "reserved"));
return 0; }