Messages in this thread | | | Subject | Re: [PATCH] fs: use kmalloc() to allocate fdmem if possible | From | Eric Dumazet <> | Date | Tue, 04 May 2010 07:33:00 +0200 |
| |
Le mardi 04 mai 2010 à 12:20 +0800, Changli Gao a écrit :
> we can use alloc_pages_exact()/free_pages_exact() when size is larger > than PAGE_SIZE, then size isn't needed to be a power of two. > > void *kvmalloc(size_t size) > { > void *ptr; > > if (size < PAGE_SIZE) > return kmalloc(size, GFP_KERNEL); > ptr = alloc_pages_exact(size, GFP_KERNEL | __GFP_NOWARN); > if (ptr) > return ptr; > return vmalloc(size); > } > > void *kvfree(void *ptr, size_t size) > { > BUG_ON(in_interrupt()); > if (size < PAGE_SIZE) > kfree(ptr); > else if (is_vmalloc_addr(ptr)) > vfree(ptr); > else > free_pages_exact(ptr, size); > }
Yes, this has the drawback to need 'size' in kvfree(), but it should not be a problem for users of this code.
alloc_pages_exact() also fragments high order page, but I guess it's not worse than kmalloc() in this context.
-- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/
| |