summaryrefslogtreecommitdiffstats
path: root/lib
diff options
context:
space:
mode:
authorMichael Ellerman <michael@ellerman.id.au>2010-01-12 21:25:24 +0000
committerBenjamin Herrenschmidt <benh@kernel.crashing.org>2010-02-03 17:39:50 +1100
commit24551f64d47af9539a7f324343bffeea09d9dcfa (patch)
tree4a6e8660f0cd71a3e8ad97b221ac2ae2da1da322 /lib
parent859aefc5afc6c00dae630680e5470f7a2c27c4a0 (diff)
downloadlinux-24551f64d47af9539a7f324343bffeea09d9dcfa.tar.gz
linux-24551f64d47af9539a7f324343bffeea09d9dcfa.tar.bz2
linux-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')
-rw-r--r--lib/lmb.c13
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;