lmb: Add lmb_free()
We can free memory allocated with lmb_alloc() by removing it from the list of reserved LMBs. Rework lmb_remove() to allow that possibility and add lmb_free() which exploits it. BenH: Removed some useless parenthesis Signed-off-by: Michael Ellerman <michael@ellerman.id.au> Signed-off-by: Benjamin Herrenschmidt <benh@kernel.crashing.org>
This commit is contained in:
parent
859aefc5af
commit
24551f64d4
2 changed files with 12 additions and 2 deletions
|
@ -42,6 +42,7 @@ extern void __init lmb_init(void);
|
|||
extern void __init lmb_analyze(void);
|
||||
extern long lmb_add(u64 base, u64 size);
|
||||
extern long lmb_remove(u64 base, u64 size);
|
||||
extern long __init lmb_free(u64 base, u64 size);
|
||||
extern long __init lmb_reserve(u64 base, u64 size);
|
||||
extern u64 __init lmb_alloc_nid(u64 size, u64 align, int nid,
|
||||
u64 (*nid_range)(u64, u64, int *));
|
||||
|
|
13
lib/lmb.c
13
lib/lmb.c
|
@ -205,9 +205,8 @@ long lmb_add(u64 base, u64 size)
|
|||
|
||||
}
|
||||
|
||||
long lmb_remove(u64 base, u64 size)
|
||||
static long __lmb_remove(struct lmb_region *rgn, u64 base, u64 size)
|
||||
{
|
||||
struct lmb_region *rgn = &(lmb.memory);
|
||||
u64 rgnbegin, rgnend;
|
||||
u64 end = base + size;
|
||||
int i;
|
||||
|
@ -254,6 +253,16 @@ long lmb_remove(u64 base, u64 size)
|
|||
return lmb_add_region(rgn, end, rgnend - end);
|
||||
}
|
||||
|
||||
long lmb_remove(u64 base, u64 size)
|
||||
{
|
||||
return __lmb_remove(&lmb.memory, base, size);
|
||||
}
|
||||
|
||||
long __init lmb_free(u64 base, u64 size)
|
||||
{
|
||||
return __lmb_remove(&lmb.reserved, base, size);
|
||||
}
|
||||
|
||||
long __init lmb_reserve(u64 base, u64 size)
|
||||
{
|
||||
struct lmb_region *_rgn = &lmb.reserved;
|
||||
|
|
Loading…
Reference in a new issue