mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git
synced 2025-01-07 13:43:51 +00:00
slub: Add kmalloc_large_node() to support kmalloc_node fallback
Slub is missing some NUMA support for large kmallocs. Provide that. Reviewed-by: Pekka Enberg <penberg@cs.helsinki.fi> Signed-off-by: Christoph Lameter <clameter@sgi.com>
This commit is contained in:
parent
7693143481
commit
f619cfe1bd
15
mm/slub.c
15
mm/slub.c
@ -2592,13 +2592,24 @@ void *__kmalloc(size_t size, gfp_t flags)
|
|||||||
}
|
}
|
||||||
EXPORT_SYMBOL(__kmalloc);
|
EXPORT_SYMBOL(__kmalloc);
|
||||||
|
|
||||||
|
static void *kmalloc_large_node(size_t size, gfp_t flags, int node)
|
||||||
|
{
|
||||||
|
struct page *page = alloc_pages_node(node, flags | __GFP_COMP,
|
||||||
|
get_order(size));
|
||||||
|
|
||||||
|
if (page)
|
||||||
|
return page_address(page);
|
||||||
|
else
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
#ifdef CONFIG_NUMA
|
#ifdef CONFIG_NUMA
|
||||||
void *__kmalloc_node(size_t size, gfp_t flags, int node)
|
void *__kmalloc_node(size_t size, gfp_t flags, int node)
|
||||||
{
|
{
|
||||||
struct kmem_cache *s;
|
struct kmem_cache *s;
|
||||||
|
|
||||||
if (unlikely(size > PAGE_SIZE))
|
if (unlikely(size > PAGE_SIZE))
|
||||||
return kmalloc_large(size, flags);
|
return kmalloc_large_node(size, flags, node);
|
||||||
|
|
||||||
s = get_slab(size, flags);
|
s = get_slab(size, flags);
|
||||||
|
|
||||||
@ -3146,7 +3157,7 @@ void *__kmalloc_node_track_caller(size_t size, gfp_t gfpflags,
|
|||||||
struct kmem_cache *s;
|
struct kmem_cache *s;
|
||||||
|
|
||||||
if (unlikely(size > PAGE_SIZE))
|
if (unlikely(size > PAGE_SIZE))
|
||||||
return kmalloc_large(size, gfpflags);
|
return kmalloc_large_node(size, gfpflags, node);
|
||||||
|
|
||||||
s = get_slab(size, gfpflags);
|
s = get_slab(size, gfpflags);
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user