Messages in this thread Patch in this message | | | From | Peng Wang <> | Subject | [PATCH] bitmap: Add bitmap_valloc(), bitmap_vzalloc() and bitmap_vfree() | Date | Fri, 28 Dec 2018 00:18:29 +0800 |
| |
Introduce bitmap alloc/free helpers when contiguous memory is not necessary.
Signed-off-by: Peng Wang <rocking@whu.edu.cn> --- include/linux/bitmap.h | 3 +++ lib/bitmap.c | 19 +++++++++++++++++++ 2 files changed, 22 insertions(+)
diff --git a/include/linux/bitmap.h b/include/linux/bitmap.h index f58e97446abc..aaad1b33dfd5 100644 --- a/include/linux/bitmap.h +++ b/include/linux/bitmap.h @@ -111,6 +111,9 @@ extern unsigned long *bitmap_alloc(unsigned int nbits, gfp_t flags); extern unsigned long *bitmap_zalloc(unsigned int nbits, gfp_t flags); extern void bitmap_free(const unsigned long *bitmap); +extern unsigned long *bitmap_valloc(unsigned int nbits, gfp_t flags); +extern unsigned long *bitmap_vzalloc(unsigned int nbits, gfp_t flags); +extern void bitmap_vfree(const unsigned long *bitmap); /* * lib/bitmap.c provides these functions: diff --git a/lib/bitmap.c b/lib/bitmap.c index eead55aa7170..739597e436ad 100644 --- a/lib/bitmap.c +++ b/lib/bitmap.c @@ -1139,6 +1139,25 @@ void bitmap_free(const unsigned long *bitmap) } EXPORT_SYMBOL(bitmap_free); +unsigned long *bitmap_valloc(unsigned int nbits, gfp_t flags) +{ + return kvmalloc_array(BITS_TO_LONGS(nbits), sizeof(unsigned long), + flags); +} +EXPORT_SYMBOL(bitmap_valloc); + +unsigned long *bitmap_vzalloc(unsigned int nbits, gfp_t flags) +{ + return bitmap_valloc(nbits, flags | __GFP_ZERO); +} +EXPORT_SYMBOL(bitmap_vzalloc); + +void bitmap_vfree(const unsigned long *bitmap) +{ + kvfree(bitmap); +} +EXPORT_SYMBOL(bitmap_vfree); + #if BITS_PER_LONG == 64 /** * bitmap_from_arr32 - copy the contents of u32 array of bits to bitmap -- 2.19.1
| |