VMEM_CREATE(9F) Kernel Functions for Drivers VMEM_CREATE(9F)
NAME
vmem_create,
vmem_xcreate,
vmem_destroy - create and destroy vmem
arenas
SYNOPSIS
#include <sys/vmem.h> typedef struct vmem vmem_t; typedef void *(vmem_alloc_t)(vmem_t *, size_t, int); typedef void (vmem_free_t)(vmem_t *, void *, size_t); typedef void *(vmem_ximport_t)(vmem_t *, size_t *, size_t, int); vmem_t * vmem_create(
const char *name,
void *base,
size_t size,
size_t quantum,
vmem_alloc_t *afunc,
vmem_free_t *ffunc,
vmem_t *source,
size_t qcache_max,
int vmflag);
vmem_t * vmem_xcreate(
const char *name,
void *base,
size_t size,
size_t quantum,
vmem_ximport_t *afunc,
vmem_free_t *ffunc,
vmem_t *source,
size_t qcache_max,
int vmflag);
void vmem_destroy(
vmem_t *vmp);
INTERFACE LEVEL
illumos DDI specific
PARAMETERS
name A character string giving a name to the vmem arena to be
created.
base An address indicating the lowest possible value in the arena.
size The size of the arena to create.
quantum The arena's "quantum". The granularity of the arena. The
amount allocated at minimum by each request. Must be a power
of 2.
afunc A function which is called to import new spans from
source,
which may be NULL if this arena does not import from another.
When calling
vmem_create(),
afunc is a
vmem_alloc_t, a function
taking three parameters and returning a pointer to
void (the
imported space):
vmem_t * The source arena from which we'll import. The
source argument to
vmem_create().
size_t The size to import.
int The
vmflag argument used for the import.
When calling
vmem_xcreate(),
afunc is a
vmem_ximport_t, a
function taking four parameters and returning a pointer to
void (the imported space):
vmem_t * The source arena from which we'll import. The
source argument to
vmem_xcreate().
size_t * The size of the import.
afunc may
increase this size
if that is desirable, but must never decrease it.
size_t The desired alignment of the imported space.
int The
vmflag argument used for the import.
ffunc A function which is called to return spans to
source, which may
be NULL if this arena does not import from another. This is a
vmem_free_t, a function taking three parameters and returning
void:
vmem_t The arena to which space is being returned. The
source argument to
vmem_create() or
vmem_xcreate().
void * The span being returned to the source arena.
size_t The size of the span being returned to the source
arena.
source An arena from which this arena will import, which may be NULL
if this arena does not import from another.
qcache_max Each arena offers caching of integer multiples of
quantum up to
qcache_max, which may be 0.
vmflag A bitmask of flags indicating the characteristics of this
arena.
VMC_IDENTIFIER
The arena represents arbitrary integer identifiers,
rather than virtual memory.
vmp A pointer to the vmem arena to be destroyed.
DESCRIPTION
A
vmem arena is a section of an arbitrary address space (a range of
integer addresses). This commonly represents virtual memory, but can
in fact be an arbitrary set of integers. The VMC_IDENTIFIER flag set
at arena creation time differentiates between these two cases.
The
afunc,
ffunc,
and source arguments combine to support a
hierarchical structure of arenas, each importing from a single parent
(the
source). The
vmem_create() and
vmem_xcreate() functions differ in
that the latter provides an interface for
afunc to alter the size of
the span imported from
source. It is only legal to
increase this size.
CONTEXT
These functions can be called from user or kernel context.
RETURN VALUES
Upon successful completion the
vmem_create() and
vmem_xcreate()
functions return a pointer to a vmem arena. Otherwise, NULL is
returned to indicate the arena could not be created.
SEE ALSO
vmem(9),
vmem_add(9F),
vmem_alloc(9F)illumos January 18, 2017 illumos