summaryrefslogtreecommitdiff
path: root/static/netbsd/man9/uvm_km.9
diff options
context:
space:
mode:
Diffstat (limited to 'static/netbsd/man9/uvm_km.9')
-rw-r--r--static/netbsd/man9/uvm_km.9187
1 files changed, 187 insertions, 0 deletions
diff --git a/static/netbsd/man9/uvm_km.9 b/static/netbsd/man9/uvm_km.9
new file mode 100644
index 00000000..61ef6009
--- /dev/null
+++ b/static/netbsd/man9/uvm_km.9
@@ -0,0 +1,187 @@
+.\" $NetBSD: uvm_km.9,v 1.5 2015/08/15 10:31:41 maxv Exp $
+.\"
+.\" Copyright (c) 1998 Matthew R. Green
+.\" All rights reserved.
+.\"
+.\" Redistribution and use in source and binary forms, with or without
+.\" modification, are permitted provided that the following conditions
+.\" are met:
+.\" 1. Redistributions of source code must retain the above copyright
+.\" notice, this list of conditions and the following disclaimer.
+.\" 2. Redistributions in binary form must reproduce the above copyright
+.\" notice, this list of conditions and the following disclaimer in the
+.\" documentation and/or other materials provided with the distribution.
+.\"
+.\" THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+.\" IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+.\" OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+.\" IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+.\" INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+.\" BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+.\" LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
+.\" AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+.\" OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+.\" SUCH DAMAGE.
+.\"
+.Dd August 15, 2015
+.Dt UVM_KM 9
+.Os
+.Sh NAME
+.Nm uvm_km
+.Nd raw kernel memory or address space allocator
+.Sh SYNOPSIS
+.In sys/param.h
+.In uvm/uvm.h
+.Ft vaddr_t
+.Fn uvm_km_alloc "struct vm_map *map" "vsize_t size" "vsize_t align" "uvm_flag_t flags"
+.Ft void
+.Fn uvm_km_free "struct vm_map *map" "vaddr_t addr" "vsize_t size" "uvm_flag_t flags"
+.Ft struct vm_map *
+.Fn uvm_km_suballoc "struct vm_map *map" "vaddr_t *min" "vaddr_t *max" \
+"vsize_t size" "int flags" "bool fixed" "struct vm_map *submap"
+.Sh DESCRIPTION
+The UVM facility for allocation of kernel memory or address space in pages.
+Both wired and pageable memory can be allocated by this facility, as well
+as kernel address space.
+Note that this is a raw allocator.
+For general purpose memory allocation,
+.Xr kmem 9
+interface should be used.
+.Sh FUNCTIONS
+.Fn uvm_km_alloc
+allocates a contiguous range of
+.Fa size
+bytes of kernel memory in map
+.Fa 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
+.Fa align
+argument
+.Pq specify 0 if no alignment is necessary .
+The alignment must be a multiple of page size.
+The
+.Fa flags
+is a bitwise inclusive OR of the allocation type and operation flags.
+.Pp
+The allocation type should be one of:
+.Bl -tag -width UVM_KMF_PAGEABLE
+.It UVM_KMF_WIRED
+Wired memory.
+.It UVM_KMF_PAGEABLE
+Demand-paged zero-filled memory.
+.It UVM_KMF_VAONLY
+Virtual address only.
+No physical pages are mapped in the allocated region.
+If necessary, it is the caller's responsibility to enter page mappings.
+It is also the caller's responsibility to clean up the mappings before freeing
+the address range.
+.El
+.Pp
+The following operation flags are available:
+.Bl -tag -width UVM_KMF_PAGEABLE
+.It UVM_KMF_CANFAIL
+Can fail even if
+.Dv UVM_KMF_NOWAIT
+is not specified and
+.Dv UVM_KMF_WAITVA
+is specified.
+.It UVM_KMF_ZERO
+Request zero-filled memory.
+Only supported for
+.Dv UVM_KMF_WIRED .
+Should not be used with other types.
+.It UVM_KMF_EXEC
+Request memory with executable rights.
+.It UVM_KMF_TRYLOCK
+Fail if cannot lock the map without sleeping.
+.It UVM_KMF_NOWAIT
+Fail immediately if no memory is available.
+.It UVM_KMF_WAITVA
+Sleep to wait for the virtual address resources if needed.
+.El
+.Pp
+If neither
+.Dv UVM_KMF_NOWAIT
+nor
+.Dv UVM_KMF_CANFAIL
+are specified and
+.Dv UVM_KMF_WAITVA
+is specified,
+.Fn uvm_km_alloc
+will never fail, but rather sleep indefinitely until the allocation succeeds.
+.Pp
+Pageability of the pages allocated with
+.Dv UVM_KMF_PAGEABLE
+can be changed by
+.Fn uvm_map_pageable .
+In that case, the entire range must be changed atomically.
+Changing a part of the range is not supported.
+.Pp
+.Fn uvm_km_free
+frees the memory range allocated by
+.Fn uvm_km_alloc .
+.Fa addr
+must be an address returned by
+.Fn uvm_km_alloc .
+.Fa map
+and
+.Fa size
+must be the same as the ones used for the corresponding
+.Fn uvm_km_alloc .
+.Fa flags
+must be the allocation type used for the corresponding
+.Fn uvm_km_alloc .
+Note that
+.Fn uvm_km_free
+is the only way to free memory ranges allocated by
+.Fn uvm_km_alloc .
+.Fn uvm_unmap
+must not be used.
+.Pp
+.Fn uvm_km_suballoc
+allocates submap from
+.Fa map ,
+creating a new map if
+.Fa submap
+is
+.Dv NULL .
+The addresses of the submap can be specified explicitly by setting the
+.Fa fixed
+argument to true, which causes the
+.Fa min
+argument to specify the beginning of the address in the submap.
+If
+.Fa fixed
+is false, any address of size
+.Fa size
+will be allocated from
+.Fa map
+and the start and end addresses returned in
+.Fa min
+and
+.Fa max .
+The
+.Fa flags
+are used to initialize the created submap.
+The following flags can be set:
+.Bl -tag -width VM_MAP_PAGEABLE
+.It VM_MAP_PAGEABLE
+Entries in the map may be paged out.
+.It VM_MAP_INTRSAFE
+Map should be interrupt-safe.
+.It VM_MAP_TOPDOWN
+A top-down mapping should be arranged.
+.El
+.Sh SEE ALSO
+.Xr kmem 9 ,
+.Xr pmap 9 ,
+.Xr pool_cache 9 ,
+.Xr uvm 9 ,
+.Xr uvm_map 9 ,
+.Xr vmem 9
+.Sh HISTORY
+UVM and
+.Nm
+first appeared in
+.Nx 1.4 .