UVM_KM(9) | Kernel Developer's Manual | UVM_KM(9) |
uvm_km
—
#include <sys/param.h>
#include <uvm/uvm.h>
vaddr_t
uvm_km_alloc
(struct
vm_map *map, vsize_t
size, vsize_t
align, uvm_flag_t
flags);
void
uvm_km_free
(struct
vm_map *map, vaddr_t
addr, vsize_t size,
uvm_flag_t flags);
struct vm_map *
uvm_km_suballoc
(struct
vm_map *map, vaddr_t
*min, vaddr_t *max,
vsize_t size,
int flags,
bool fixed,
struct vm_map
*submap);
uvm_km_alloc
() allocates a contiguous range of
size bytes of kernel memory in map
map and returns the virtual address of the range, or
returns zero on failure. The first address of the allocated memory range will
be aligned according to the align argument (specify 0 if
no alignment is necessary). The alignment must be a multiple of page size. The
flags is a bitwise inclusive OR of the allocation type
and operation flags.
The allocation type should be one of:
The following operation flags are available:
UVM_KMF_NOWAIT
is not specified
and UVM_KMF_WAITVA
is specified.UVM_KMF_WIRED
. Should not be used with other
types.If neither UVM_KMF_NOWAIT
nor
UVM_KMF_CANFAIL
are specified and
UVM_KMF_WAITVA
is specified,
uvm_km_alloc
() will never fail, but rather sleep
indefinitely until the allocation succeeds.
Pageability of the pages allocated with
UVM_KMF_PAGEABLE
can be changed by
uvm_map_pageable
(). In that case, the entire range
must be changed atomically. Changing a part of the range is not
supported.
uvm_km_free
() frees the memory range
allocated by uvm_km_alloc
().
addr must be an address returned by
uvm_km_alloc
(). map and
size must be the same as the ones used for the
corresponding uvm_km_alloc
().
flags must be the allocation type used for the
corresponding uvm_km_alloc
(). Note that
uvm_km_free
() is the only way to free memory ranges
allocated by uvm_km_alloc
().
uvm_unmap
() must not be used.
uvm_km_suballoc
() allocates submap from
map, creating a new map if
submap is NULL
. The addresses
of the submap can be specified explicitly by setting the
fixed argument to true, which causes the
min argument to specify the beginning of the address
in the submap. If fixed is false, any address of size
size will be allocated from map
and the start and end addresses returned in min and
max. The flags are used to
initialize the created submap. The following flags can be set:
uvm_km
first appeared in NetBSD
1.4.
August 15, 2015 | NetBSD 9.2 |