vm: Add kva_alloc_aligned

Add a function like kva_alloc that allows us to specify the alignment
of the virtual address space returned.

Reviewed by:	alc, kib, markj
Sponsored by:	Arm Ltd
Differential Revision:	https://reviews.freebsd.org/D42788
This commit is contained in:
Andrew Turner 2023-11-29 12:54:49 +00:00
parent 8daee410d2
commit 839999e7ef
2 changed files with 22 additions and 0 deletions

View file

@ -47,6 +47,7 @@ struct domainset;
/* These operate on kernel virtual addresses only. */
vm_offset_t kva_alloc(vm_size_t);
vm_offset_t kva_alloc_aligned(vm_size_t, vm_size_t);
void kva_free(vm_offset_t, vm_size_t);
/* These operate on pageable virtual addresses. */

View file

@ -155,6 +155,27 @@ kva_alloc(vm_size_t size)
return (addr);
}
/*
* kva_alloc_aligned:
*
* Allocate a virtual address range as in kva_alloc where the base
* address is aligned to align.
*/
vm_offset_t
kva_alloc_aligned(vm_size_t size, vm_size_t align)
{
vm_offset_t addr;
TSENTER();
size = round_page(size);
if (vmem_xalloc(kernel_arena, size, align, 0, 0, VMEM_ADDR_MIN,
VMEM_ADDR_MAX, M_BESTFIT | M_NOWAIT, &addr))
return (0);
TSEXIT();
return (addr);
}
/*
* kva_free:
*