[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <h2n412e6f7f1005032120t546ecd99w4e56146c54e5b6ad@mail.gmail.com>
Date: Tue, 4 May 2010 12:20:43 +0800
From: Changli Gao <xiaosuo@...il.com>
To: Eric Dumazet <eric.dumazet@...il.com>
Cc: Avi Kivity <avi@...hat.com>,
Tetsuo Handa <penguin-kernel@...ove.sakura.ne.jp>,
jslaby@...e.cz, akpm@...ux-foundation.org,
paulmck@...ux.vnet.ibm.com, adobriyan@...il.com, mingo@...e.hu,
peterz@...radead.org, linux-fsdevel@...r.kernel.org,
linux-kernel@...r.kernel.org
Subject: Re: [PATCH] fs: use kmalloc() to allocate fdmem if possible
On Mon, May 3, 2010 at 5:13 PM, Eric Dumazet <eric.dumazet@...il.com> wrote:
>
> /*
> * Warning: if size is not a power of two, kmalloc() might
> * waste memory because of its requirements.
> */
> void *kvmalloc(size_t size)
> {
> void *ptr = kmalloc(size, GFP_KERNEL | __GFP_NOWARN);
>
> if (ptr)
> return ptr;
> return vmalloc(size);
> }
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);
}
>
> void kvfree(void *ptr)
> {
> BUG_ON(in_interrupt());
> if (is_vmalloc_addr(ptr))
> vfree(ptr);
> else
> kfree(ptr);
> }
>
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@...r.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/
Powered by blists - more mailing lists