]> git.baikalelectronics.ru Git - kernel.git/commitdiff
lib/genalloc.c: use vzalloc_node() to allocate the bitmap
authorHuang Shijie <sjhuang@iluvatar.ai>
Thu, 3 Jan 2019 23:26:51 +0000 (15:26 -0800)
committerLinus Torvalds <torvalds@linux-foundation.org>
Fri, 4 Jan 2019 21:13:46 +0000 (13:13 -0800)
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>
lib/genalloc.c

index 5deb25c40a5a144fd4d85dc93522fe5f307cc934..f365d71cdc774c089cfdce89b1aec1facb3a0b05 100644 (file)
@@ -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);