Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit f619cfe1 authored by Christoph Lameter's avatar Christoph Lameter
Browse files

slub: Add kmalloc_large_node() to support kmalloc_node fallback



Slub is missing some NUMA support for large kmallocs. Provide that.

Reviewed-by: default avatarPekka Enberg <penberg@cs.helsinki.fi>
Signed-off-by: default avatarChristoph Lameter <clameter@sgi.com>
parent 76931434
Loading
Loading
Loading
Loading
+13 −2
Original line number Diff line number Diff line
@@ -2592,13 +2592,24 @@ void *__kmalloc(size_t size, gfp_t flags)
}
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
void *__kmalloc_node(size_t size, gfp_t flags, int node)
{
	struct kmem_cache *s;

	if (unlikely(size > PAGE_SIZE))
		return kmalloc_large(size, flags);
		return kmalloc_large_node(size, flags, node);

	s = get_slab(size, flags);

@@ -3146,7 +3157,7 @@ void *__kmalloc_node_track_caller(size_t size, gfp_t gfpflags,
	struct kmem_cache *s;

	if (unlikely(size > PAGE_SIZE))
		return kmalloc_large(size, gfpflags);
		return kmalloc_large_node(size, gfpflags, node);

	s = get_slab(size, gfpflags);