diff options
author | Michael Ellerman <michael@ellerman.id.au> | 2010-01-12 21:25:24 +0000 |
---|---|---|
committer | Benjamin Herrenschmidt <benh@kernel.crashing.org> | 2010-02-03 17:39:50 +1100 |
commit | 24551f64d47af9539a7f324343bffeea09d9dcfa (patch) | |
tree | 4a6e8660f0cd71a3e8ad97b221ac2ae2da1da322 /lib/lmb.c | |
parent | 859aefc5afc6c00dae630680e5470f7a2c27c4a0 (diff) | |
download | lwn-24551f64d47af9539a7f324343bffeea09d9dcfa.tar.gz lwn-24551f64d47af9539a7f324343bffeea09d9dcfa.zip |
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>
Diffstat (limited to 'lib/lmb.c')
-rw-r--r-- | lib/lmb.c | 13 |
1 files changed, 11 insertions, 2 deletions
diff --git a/lib/lmb.c b/lib/lmb.c index 9cee17142b2c..b1fc52606524 100644 --- a/lib/lmb.c +++ b/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; |