On Mon, May 3, 2010 at 5:13 PM, Eric Dumazet <eric.dumazet@gmail.com> wrote:
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);
}
--