lib/genalloc.c: use vzalloc_node() to allocate the bitmap
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>
This commit is contained in:
parent
439e00b76a
commit
6862d2fc81
@ -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) +
|
int nbytes = sizeof(struct gen_pool_chunk) +
|
||||||
BITS_TO_LONGS(nbits) * sizeof(long);
|
BITS_TO_LONGS(nbits) * sizeof(long);
|
||||||
|
|
||||||
chunk = kzalloc_node(nbytes, GFP_KERNEL, nid);
|
chunk = vzalloc_node(nbytes, nid);
|
||||||
if (unlikely(chunk == NULL))
|
if (unlikely(chunk == NULL))
|
||||||
return -ENOMEM;
|
return -ENOMEM;
|
||||||
|
|
||||||
@ -251,7 +251,7 @@ void gen_pool_destroy(struct gen_pool *pool)
|
|||||||
bit = find_next_bit(chunk->bits, end_bit, 0);
|
bit = find_next_bit(chunk->bits, end_bit, 0);
|
||||||
BUG_ON(bit < end_bit);
|
BUG_ON(bit < end_bit);
|
||||||
|
|
||||||
kfree(chunk);
|
vfree(chunk);
|
||||||
}
|
}
|
||||||
kfree_const(pool->name);
|
kfree_const(pool->name);
|
||||||
kfree(pool);
|
kfree(pool);
|
||||||
|
Loading…
Reference in New Issue
Block a user