Messages in this thread Patch in this message | | | Date | Sun, 16 Nov 2008 12:33:15 +0800 | From | Lai Jiangshan <> | Subject | [PATCH 1/7] mm: introduce simple_malloc()/simple_free() |
| |
some subsystem needs vmalloc() when required memory is large. but current kernel has not APIs for this requirement. this patch introduces simple_malloc() and simple_free().
Signed-off-by: Lai Jiangshan <laijs@cn.fujitsu.com> --- diff --git a/include/linux/mm.h b/include/linux/mm.h index ffee2f7..e9c11f7 100644 --- a/include/linux/mm.h +++ b/include/linux/mm.h @@ -13,6 +13,7 @@ #include <linux/prio_tree.h> #include <linux/debug_locks.h> #include <linux/mm_types.h> +#include <linux/vmalloc.h> struct mempolicy; struct anon_vma; @@ -278,6 +279,36 @@ static inline int is_vmalloc_addr(const void *x) #endif } +static inline void *__simple_malloc(unsigned long size, int pages_hint) +{ + if (size <= PAGE_SIZE * pages_hint) + return kmalloc(size, GFP_KERNEL); + else + return vmalloc(size); +} + +/** + * simple_malloc - allocate memory by kmalloc() or vmalloc() + * + * if @size <= PAGE_SIZE, memory is allocated by kmalloc(), + * otherwise by vmalloc() + */ +static inline void *simple_malloc(unsigned long size) +{ + return __simple_malloc(size, 1); +} + +/** + * simple_free - free the memory by kfree(), or vfree() if it is vmalloc addr + */ +static inline void simple_free(void *ptr) +{ + if (is_vmalloc_addr(ptr)) + vfree(ptr); + else + kfree(ptr); +} + static inline struct page *compound_head(struct page *page) { if (unlikely(PageTail(page)))
| |