VM_MAP_FIND(9)
β¨ VM_MAP_FIND(9) β¨
okay so bestie, welcome to the VM_MAP_FIND(9) page β yes, that's the Kernel Developer's Manual, and yes we're gonna make it make sense. This is all about vm_map_find: finding a free region inside a map, and optionally mapping a vm_object. iykyk π«Ά
π NAME π
vm_map_find β find a free region within a map, and optionally map a vm_object
πΈ SYNOPSIS πΈ
#include <sys/param.h>
#include <vm/vm.h>
#include <vm/vm_map.h>
int
vm_map_find(vm_map_t map, vm_object_t object, vm_ooffset_t offset,
vm_offset_t *addr, vm_size_t length, vm_offset_t max_addr,
int find_space, vm_prot_t prot, vm_prot_t max, int cow);
π¦ DESCRIPTION π¦
The vm_map_find() function attempts to find a free region in the target map, with the given length. If a free region is found, vm_map_find() creates a mapping of object via a call to vm_map_insert(9).
The arguments offset, prot, max, and cow are passed unchanged to vm_map_insert(9) when creating the mapping, if and only if a free region is found.
β οΈ bestie, important: ifobjectis non-NULL, the reference count on theobjectmust be incremented by the caller before calling this function to account for the new entry. no cap, do not skip that.
If max_addr is non-zero, it specifies an upper bound on the mapping. The mapping will only succeed if a free region can be found that resides entirely below max_addr.
The find_space argument specifies the strategy to use when searching for a free region of the requested length. For all values other than VMFS_NO_SPACE, vm_map_findspace(9) is called to locate a free region of the requested length with a starting address at or above *addr. The following strategies are supported:
π― the find_space strategy menu π―
VMFS_NO_SPACEβ The mapping will only succeed if there is a free region of the requested length at the given address*addr.VMFS_ANY_SPACEβ The mapping will succeed as long as there is a free region.VMFS_SUPER_SPACEβ The mapping will succeed as long as there is a free region that begins on a superpage boundary. Ifobjectis non-NULL and is already backed by superpages, then the mapping will require a free region that aligns relative to the existing superpages rather than one beginning on a superpage boundary.VMFS_OPTIMAL_SPACEβ The mapping will succeed as long as there is a free region. However, ifobjectis non-NULL and is already backed by superpages, this strategy will attempt to find a free region aligned relative to the existing superpages.VMFS_ALIGNED_SPACE(n)β The mapping will succeed as long as there is a free region that aligns on a2^nboundary.
π§ IMPLEMENTATION NOTES π§
This function acquires a lock on map by calling vm_map_lock(9), and holds it until the function returns. π
The search for a free region is defined to be first-fit, from the address addr onwards.
π RETURN VALUES π
The vm_map_find() function returns KERN_SUCCESS if the mapping was successfully created.
If space could not be found or find_space was VMFS_NO_SPACE and the given address, addr, was already mapped, KERN_NO_SPACE will be returned.
If the discovered range turned out to be bogus, KERN_INVALID_ADDRESS will be returned.
π SEE ALSO π
π AUTHORS π
This manual page was written by Bruce M Simpson <bms@spc.org>.
mwah π that's the whole page β from Debian, dated September 12, 2013, under the VM_MAP_FIND(9) banner. slay, bye bestie! πβ¨
π¦ where this page comes from
- freebsd 14.5: base 14.5
- freebsd 15.1: base 15.1
- nixpkgs unstable: source
- Copyright (c) 2003 Bruce M Simpson <bms@spc.org>
- π girlified by deepseek-ai/DeepSeek-V4.1-Flash-1017 on : a language model's rewrite of the original, under its terms