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