Describe arguments "allocfn", "freefn", and "source" of vmem_create(9)
in more detail. Describe vmem_add(9). Write a new BUGS section that warns about aspects of vmem(9) behavior that may surprise first-time users.
This commit is contained in:
parent
664580ff00
commit
956cd94758
|
@ -1,4 +1,4 @@
|
|||
.\" $NetBSD: vmem.9,v 1.6 2009/08/03 23:15:29 rmind Exp $
|
||||
.\" $NetBSD: vmem.9,v 1.7 2009/12/21 22:49:18 dyoung Exp $
|
||||
.\"
|
||||
.\" Copyright (c)2006 YAMAMOTO Takashi,
|
||||
.\" All rights reserved.
|
||||
|
@ -25,7 +25,7 @@
|
|||
.\" SUCH DAMAGE.
|
||||
.\"
|
||||
.\" ------------------------------------------------------------
|
||||
.Dd August 3, 2009
|
||||
.Dd December 21, 2009
|
||||
.Dt VMEM 9
|
||||
.Os
|
||||
.\" ------------------------------------------------------------
|
||||
|
@ -44,6 +44,10 @@
|
|||
"vmem_t *source" "vmem_size_t qcache_max" "vm_flag_t flags" "int ipl"
|
||||
.\" - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
.Ft vmem_addr_t
|
||||
.Fn vmem_add \
|
||||
"vmem_t *vm" "vmem_addr_t addr" "vmem_size_t size" "vm_flag_t flags"
|
||||
.\" - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
.Ft vmem_addr_t
|
||||
.Fn vmem_xalloc \
|
||||
"vmem_t *vm" "vmem_size_t size" "vmem_size_t align" \
|
||||
"vmem_size_t phase" "vmem_size_t nocross" "vmem_addr_t minaddr" \
|
||||
|
@ -86,10 +90,70 @@ The size of the initial span.
|
|||
The smallest unit of allocation.
|
||||
.It Fa allocfn
|
||||
The callback function used to import spans from the backend arena.
|
||||
Set both
|
||||
.Fa allocfn
|
||||
and
|
||||
.Fa freefn
|
||||
to
|
||||
.Dv NULL
|
||||
to disable automatic imports.
|
||||
.Nm
|
||||
calls
|
||||
.Fo "(*allocfn)"
|
||||
.Fa source
|
||||
.Fa size
|
||||
.Fa "&actualsize"
|
||||
.Fa flags
|
||||
.Fc
|
||||
to import a span of size at least
|
||||
.Fa size .
|
||||
.Fa allocfn
|
||||
should accept the same
|
||||
.Fa flags
|
||||
as
|
||||
.Fn vmem_alloc .
|
||||
.Fa allocfn
|
||||
must return
|
||||
.Dv VMEM_ADDR_NULL
|
||||
to indicate failure, or
|
||||
else the starting address of the imported span.
|
||||
If
|
||||
.Fa allocfn
|
||||
succeeds, it must write the actual size of the allocation to
|
||||
.Fa actualsize .
|
||||
The actual size will always be greater than or equal to the requested size.
|
||||
.It Fa freefn
|
||||
The callback function used to free spans to the backend arena.
|
||||
.Fa freefn
|
||||
may not be
|
||||
.Dv NULL
|
||||
unless
|
||||
.Fa allocfn
|
||||
is
|
||||
.Dv NULL .
|
||||
.Nm
|
||||
calls
|
||||
.Fn "(*freefn)" source addr size
|
||||
to return to
|
||||
.Fa source
|
||||
a span of size
|
||||
.Fa size ,
|
||||
starting at
|
||||
.Fa addr ,
|
||||
that was previously allocated by
|
||||
.Fa allocfn .
|
||||
.It Fa source
|
||||
The backend arena.
|
||||
.Fa source
|
||||
may be
|
||||
.Dv NULL .
|
||||
.Nm
|
||||
passes
|
||||
.Fa source
|
||||
as the first argument of
|
||||
.Fa allocfn
|
||||
and
|
||||
.Fa freefn .
|
||||
.It Fa qcache_max
|
||||
The largest size of allocations which can be served by quantum cache.
|
||||
It is merely a hint and can be ignored.
|
||||
|
@ -109,6 +173,28 @@ Interrupt level to be blocked for allocating from vmem.
|
|||
.El
|
||||
.Pp
|
||||
.\" - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
.Fn vmem_add
|
||||
adds a span of size
|
||||
.Fa size
|
||||
starting at
|
||||
.Fa addr
|
||||
to the arena.
|
||||
Returns
|
||||
.Fa addr
|
||||
on success.
|
||||
.Fa flags
|
||||
should be one of:
|
||||
.Bl -tag -width VM_NOSLEEP
|
||||
.It Dv VM_SLEEP
|
||||
Can sleep until enough resources are available.
|
||||
.It Dv VM_NOSLEEP
|
||||
Don't sleep.
|
||||
Immediately return
|
||||
.Dv VMEM_ADDR_NULL
|
||||
if there are not enough resources available.
|
||||
.El
|
||||
.Pp
|
||||
.\" - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
.Fn vmem_xalloc
|
||||
allocates a resource from the arena.
|
||||
.Pp
|
||||
|
@ -171,7 +257,7 @@ if there are not enough resources available.
|
|||
.\" ------------------------------------------------------------
|
||||
.Fn vmem_xfree
|
||||
frees resource allocated by
|
||||
.Fa vmem_xalloc
|
||||
.Fn vmem_xalloc
|
||||
to the arena.
|
||||
.Pp
|
||||
.Bl -tag -width addr
|
||||
|
@ -227,7 +313,7 @@ if there are not enough resources available.
|
|||
.\" - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
.Fn vmem_free
|
||||
frees resource allocated by
|
||||
.Fa vmem_alloc
|
||||
.Fn vmem_alloc
|
||||
to the arena.
|
||||
.Pp
|
||||
.Bl -tag -width addr
|
||||
|
@ -300,6 +386,27 @@ subsystem is implemented within the file
|
|||
.%D 2001
|
||||
.Re
|
||||
.\" ------------------------------------------------------------
|
||||
.Sh BUGS
|
||||
.Nm
|
||||
cannot manage a resource that starts at 0, because it reserves the
|
||||
address
|
||||
.Dv VMEM_ADDR_NULL
|
||||
.Pq 0
|
||||
for indicating errors.
|
||||
.Pp
|
||||
.Nm
|
||||
cannot manage a resource that ends at the maximum
|
||||
.Vt vmem_addr_t .
|
||||
This is an implementation limitation.
|
||||
.Pp
|
||||
.Nm
|
||||
relies on
|
||||
.Xr malloc 9 ,
|
||||
.Xr pool 9 ,
|
||||
and
|
||||
.Xr RUN_ONCE 9 ,
|
||||
so it cannot be used as early during system bootstrap as
|
||||
.Xr extent 9 .
|
||||
.Sh AUTHORS
|
||||
This implementation of
|
||||
.Nm
|
||||
|
|
Loading…
Reference in New Issue