summaryrefslogtreecommitdiffstats
path: root/lib
diff options
context:
space:
mode:
authorHuang Shijie <sjhuang@iluvatar.ai>2019-01-03 15:26:51 -0800
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>2019-12-05 09:21:03 +0100
commit0321fe1cdd706f6f326addfd6cd90d0e92e5fe67 (patch)
tree788a4cf1b213514c3ee022289479e287a5e1daf6 /lib
parent28fb78ccb59063d5b3cb81504b4705faed83b0e0 (diff)
downloadlinux-stable-0321fe1cdd706f6f326addfd6cd90d0e92e5fe67.tar.gz
linux-stable-0321fe1cdd706f6f326addfd6cd90d0e92e5fe67.tar.bz2
linux-stable-0321fe1cdd706f6f326addfd6cd90d0e92e5fe67.zip
lib/genalloc.c: use vzalloc_node() to allocate the bitmap
[ Upstream commit 6862d2fc81859f88c1f3f660886427893f2b4f3f ] Some devices may have big memory on chip, such as over 1G. In some cases, the nbytes maybe bigger then 4M which is the bounday of the memory buddy system (4K default). So use vzalloc_node() to allocate the bitmap. Also use vfree to free it. Link: http://lkml.kernel.org/r/20181225015701.6289-1-sjhuang@iluvatar.ai Signed-off-by: Huang Shijie <sjhuang@iluvatar.ai> Reviewed-by: Andrew Morton <akpm@linux-foundation.org> Cc: Alexey Skidanov <alexey.skidanov@intel.com> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org> Signed-off-by: Sasha Levin <sashal@kernel.org>
Diffstat (limited to 'lib')
-rw-r--r--lib/genalloc.c4
1 files changed, 2 insertions, 2 deletions
diff --git a/lib/genalloc.c b/lib/genalloc.c
index 5deb25c40a5a..f365d71cdc77 100644
--- a/lib/genalloc.c
+++ b/lib/genalloc.c
@@ -187,7 +187,7 @@ int gen_pool_add_virt(struct gen_pool *pool, unsigned long virt, phys_addr_t phy
int nbytes = sizeof(struct gen_pool_chunk) +
BITS_TO_LONGS(nbits) * sizeof(long);
- chunk = kzalloc_node(nbytes, GFP_KERNEL, nid);
+ chunk = vzalloc_node(nbytes, nid);
if (unlikely(chunk == NULL))
return -ENOMEM;
@@ -251,7 +251,7 @@ void gen_pool_destroy(struct gen_pool *pool)
bit = find_next_bit(chunk->bits, end_bit, 0);
BUG_ON(bit < end_bit);
- kfree(chunk);
+ vfree(chunk);
}
kfree_const(pool->name);
kfree(pool);