[RFC 04/10] mm: vmalloc: support creating aligned vm areas
From: David Stevens <hidden>
Date: 2026-08-27 23:31:50
Also in:
linux-mm, linux-rt-devel, lkml
Subsystem:
memory management, the rest, vmalloc · Maintainers:
Andrew Morton, Linus Torvalds, Uladzislau Rezki
Expose a get_vm_area_node() function that supports passing an alignment when allocating a vm area. Signed-off-by: David Stevens <redacted> --- include/linux/vmalloc.h | 2 ++ mm/vmalloc.c | 24 +++++++++++++++++++++++- 2 files changed, 25 insertions(+), 1 deletion(-)
diff --git a/include/linux/vmalloc.h b/include/linux/vmalloc.h
index d87dc7f77f4e..5ed9c5b25026 100644
--- a/include/linux/vmalloc.h
+++ b/include/linux/vmalloc.h@@ -246,6 +246,8 @@ static inline size_t get_vm_area_size(const struct vm_struct *area) extern struct vm_struct *get_vm_area(unsigned long size, unsigned long flags); extern struct vm_struct *get_vm_area_caller(unsigned long size, unsigned long flags, const void *caller); +extern struct vm_struct *get_vm_area_node(unsigned long size, unsigned long align, + unsigned long flags, int node); extern struct vm_struct *__get_vm_area_caller(unsigned long size, unsigned long flags, unsigned long start, unsigned long end,
diff --git a/mm/vmalloc.c b/mm/vmalloc.c
index d39897300f29..059cd0748514 100644
--- a/mm/vmalloc.c
+++ b/mm/vmalloc.c@@ -3280,7 +3280,7 @@ struct vm_struct *__get_vm_area_caller(unsigned long size, unsigned long flags, * @flags: %VM_IOREMAP for I/O mappings or VM_ALLOC * * Search an area of @size in the kernel virtual mapping area, - * and reserved it for out purposes. Returns the area descriptor + * and reserved it for our purposes. Returns the area descriptor * on success or %NULL on failure. * * Return: the area descriptor on success or %NULL on failure.
@@ -3301,6 +3301,28 @@ struct vm_struct *get_vm_area_caller(unsigned long size, unsigned long flags, NUMA_NO_NODE, GFP_KERNEL, caller); } +/** + * get_vm_area_node - reserve a contiguous kernel virtual area + * @size: size of the area + * @align: alignment of the area + * @flags: %VM_IOREMAP for I/O mappings or VM_ALLOC + * @node: node from which to allocate data structures + * + * Search an area of @size in the kernel virtual mapping area, + * and reserve it for our purposes. Returns the area descriptor + * on success or %NULL on failure. + * + * Return: the area descriptor on success or %NULL on failure. + */ +struct vm_struct *get_vm_area_node(unsigned long size, unsigned long align, + unsigned long flags, int node) +{ + return __get_vm_area_node(size, align, PAGE_SHIFT, flags, + VMALLOC_START, VMALLOC_END, + node, GFP_KERNEL, + __builtin_return_address(0)); +} + /** * find_vm_area - find a continuous kernel virtual area * @addr: base address
--
2.55.0.897.gb25b4bd76c-goog