mm: Add vmalloc_huge_node()
To enable node specific hash-tables using huge pages if possible. [bigeasy: use __vmalloc_node_range_noprof(), add nommu bits, inline vmalloc_huge] Signed-off-by: Peter Zijlstra (Intel) <peterz@infradead.org> Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de> Signed-off-by: Peter Zijlstra (Intel) <peterz@infradead.org> Reviewed-by: Christoph Hellwig <hch@lst.de> Link: https://lore.kernel.org/r/20250416162921.513656-3-bigeasy@linutronix.de
This commit is contained in:
parent
3efa66ce6e
commit
55284f7013
3 changed files with 30 additions and 8 deletions
|
|
@ -168,8 +168,13 @@ void *__vmalloc_node_noprof(unsigned long size, unsigned long align, gfp_t gfp_m
|
|||
int node, const void *caller) __alloc_size(1);
|
||||
#define __vmalloc_node(...) alloc_hooks(__vmalloc_node_noprof(__VA_ARGS__))
|
||||
|
||||
void *vmalloc_huge_noprof(unsigned long size, gfp_t gfp_mask) __alloc_size(1);
|
||||
#define vmalloc_huge(...) alloc_hooks(vmalloc_huge_noprof(__VA_ARGS__))
|
||||
void *vmalloc_huge_node_noprof(unsigned long size, gfp_t gfp_mask, int node) __alloc_size(1);
|
||||
#define vmalloc_huge_node(...) alloc_hooks(vmalloc_huge_node_noprof(__VA_ARGS__))
|
||||
|
||||
static inline void *vmalloc_huge(unsigned long size, gfp_t gfp_mask)
|
||||
{
|
||||
return vmalloc_huge_node(size, gfp_mask, NUMA_NO_NODE);
|
||||
}
|
||||
|
||||
extern void *__vmalloc_array_noprof(size_t n, size_t size, gfp_t flags) __alloc_size(1, 2);
|
||||
#define __vmalloc_array(...) alloc_hooks(__vmalloc_array_noprof(__VA_ARGS__))
|
||||
|
|
|
|||
18
mm/nommu.c
18
mm/nommu.c
|
|
@ -200,7 +200,23 @@ void *vmalloc_noprof(unsigned long size)
|
|||
}
|
||||
EXPORT_SYMBOL(vmalloc_noprof);
|
||||
|
||||
void *vmalloc_huge_noprof(unsigned long size, gfp_t gfp_mask) __weak __alias(__vmalloc_noprof);
|
||||
/*
|
||||
* vmalloc_huge_node - allocate virtually contiguous memory, on a node
|
||||
*
|
||||
* @size: allocation size
|
||||
* @gfp_mask: flags for the page level allocator
|
||||
* @node: node to use for allocation or NUMA_NO_NODE
|
||||
*
|
||||
* Allocate enough pages to cover @size from the page level
|
||||
* allocator and map them into contiguous kernel virtual space.
|
||||
*
|
||||
* Due to NOMMU implications the node argument and HUGE page attribute is
|
||||
* ignored.
|
||||
*/
|
||||
void *vmalloc_huge_node_noprof(unsigned long size, gfp_t gfp_mask, int node)
|
||||
{
|
||||
return __vmalloc_noprof(size, gfp_mask);
|
||||
}
|
||||
|
||||
/*
|
||||
* vzalloc - allocate virtually contiguous memory with zero fill
|
||||
|
|
|
|||
11
mm/vmalloc.c
11
mm/vmalloc.c
|
|
@ -3943,9 +3943,10 @@ void *vmalloc_noprof(unsigned long size)
|
|||
EXPORT_SYMBOL(vmalloc_noprof);
|
||||
|
||||
/**
|
||||
* vmalloc_huge - allocate virtually contiguous memory, allow huge pages
|
||||
* vmalloc_huge_node - allocate virtually contiguous memory, allow huge pages
|
||||
* @size: allocation size
|
||||
* @gfp_mask: flags for the page level allocator
|
||||
* @node: node to use for allocation or NUMA_NO_NODE
|
||||
*
|
||||
* Allocate enough pages to cover @size from the page level
|
||||
* allocator and map them into contiguous kernel virtual space.
|
||||
|
|
@ -3954,13 +3955,13 @@ EXPORT_SYMBOL(vmalloc_noprof);
|
|||
*
|
||||
* Return: pointer to the allocated memory or %NULL on error
|
||||
*/
|
||||
void *vmalloc_huge_noprof(unsigned long size, gfp_t gfp_mask)
|
||||
void *vmalloc_huge_node_noprof(unsigned long size, gfp_t gfp_mask, int node)
|
||||
{
|
||||
return __vmalloc_node_range_noprof(size, 1, VMALLOC_START, VMALLOC_END,
|
||||
gfp_mask, PAGE_KERNEL, VM_ALLOW_HUGE_VMAP,
|
||||
NUMA_NO_NODE, __builtin_return_address(0));
|
||||
gfp_mask, PAGE_KERNEL, VM_ALLOW_HUGE_VMAP,
|
||||
node, __builtin_return_address(0));
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(vmalloc_huge_noprof);
|
||||
EXPORT_SYMBOL_GPL(vmalloc_huge_node_noprof);
|
||||
|
||||
/**
|
||||
* vzalloc - allocate virtually contiguous memory with zero fill
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue