umem 1.0.1
Macros | Functions | Variables
vmem.c File Reference
#include "config.h"
#include <sys/vmem_impl_user.h>
#include <sys/sysmacros.h>
#include <stdio.h>
#include <strings.h>
#include "vmem_base.h"
#include "umem_base.h"

Macros

#define VMEM_INITIAL   6 /* early vmem arenas */
 
#define VMEM_SEG_INITIAL   100 /* early segments */
 
#define VMEM_SEGS_PER_SPAN_CREATE   2
 
#define VMEM_SEGS_PER_EXACT_ALLOC   0
 
#define VMEM_SEGS_PER_LEFT_ALLOC   1
 
#define VMEM_SEGS_PER_RIGHT_ALLOC   1
 
#define VMEM_SEGS_PER_MIDDLE_ALLOC   2
 
#define VMEM_SEGS_PER_ALLOC_MAX    (VMEM_SEGS_PER_SPAN_CREATE + VMEM_SEGS_PER_MIDDLE_ALLOC)
 
#define VMEM_POPULATE_SEGS_PER_ARENA   4
 
#define VMEM_POPULATE_LOCKS   1
 
#define VMEM_POPULATE_RESERVE    (VMEM_POPULATE_SEGS_PER_ARENA * VMEM_POPULATE_LOCKS)
 
#define VMEM_MINFREE   (VMEM_POPULATE_RESERVE + VMEM_SEGS_PER_ALLOC_MAX)
 
#define IN_POPULATE()   (vmem_nosleep_lock.vmpl_thr == thr_self())
 
#define VMEM_INSERT(vprev, vsp, type)
 
#define VMEM_DELETE(vsp, type)
 

Functions

int _cond_wait (cond_t *cv, mutex_t *mutex)
 
void vmem_reap (void)
 
void * vmem_xalloc (vmem_t *vmp, size_t size, size_t align, size_t phase, size_t nocross, void *minaddr, void *maxaddr, int vmflag)
 
void vmem_xfree (vmem_t *vmp, void *vaddr, size_t size)
 
void * vmem_alloc (vmem_t *vmp, size_t size, int vmflag)
 
void vmem_free (vmem_t *vmp, void *vaddr, size_t size)
 
int vmem_contains (vmem_t *vmp, void *vaddr, size_t size)
 
void * vmem_add (vmem_t *vmp, void *vaddr, size_t size, int vmflag)
 
void * _vmem_extend_alloc (vmem_t *vmp, void *vaddr, size_t size, size_t alloc, int vmflag)
 
void vmem_walk (vmem_t *vmp, int typemask, void(*func)(void *, void *, size_t), void *arg)
 
size_t vmem_size (vmem_t *vmp, int typemask)
 
vmem_tvmem_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)
 
void vmem_destroy (vmem_t *vmp)
 
void vmem_update (void *dummy)
 
void vmem_startup (void)
 
vmem_tvmem_init (const char *parent_name, size_t parent_quantum, vmem_alloc_t *parent_alloc, vmem_free_t *parent_free, const char *heap_name, void *heap_start, size_t heap_size, size_t heap_quantum, vmem_alloc_t *heap_alloc, vmem_free_t *heap_free)
 
void vmem_no_debug (void)
 
void vmem_lockup (void)
 
void vmem_release (void)
 

Variables

vmem_tvmem_heap
 
vmem_alloc_tvmem_heap_alloc
 
vmem_free_tvmem_heap_free
 
uint32_t vmem_mtbf
 
size_t vmem_seg_size = sizeof (vmem_seg_t)
 

Macro Definition Documentation

◆ IN_POPULATE

#define IN_POPULATE ( )    (vmem_nosleep_lock.vmpl_thr == thr_self())

Referenced by vmem_reap().

◆ VMEM_DELETE

#define VMEM_DELETE ( vsp,
type )
Value:
{ \
vmem_seg_t *vprev = (vsp)->vs_##type##prev; \
vmem_seg_t *vnext = (vsp)->vs_##type##next; \
(vprev)->vs_##type##next = (vnext); \
(vnext)->vs_##type##prev = (vprev); \
}
Definition vmem_impl_user.h:59

Referenced by vmem_destroy().

◆ VMEM_INITIAL

#define VMEM_INITIAL   6 /* early vmem arenas */

Referenced by vmem_create().

◆ VMEM_INSERT

#define VMEM_INSERT ( vprev,
vsp,
type )
Value:
{ \
vmem_seg_t *vnext = (vprev)->vs_##type##next; \
(vsp)->vs_##type##next = (vnext); \
(vsp)->vs_##type##prev = (vprev); \
(vprev)->vs_##type##next = (vsp); \
(vnext)->vs_##type##prev = (vsp); \
}

Referenced by vmem_create(), and vmem_walk().

◆ VMEM_MINFREE

#define VMEM_MINFREE   (VMEM_POPULATE_RESERVE + VMEM_SEGS_PER_ALLOC_MAX)

Referenced by vmem_alloc(), and vmem_xalloc().

◆ VMEM_POPULATE_LOCKS

#define VMEM_POPULATE_LOCKS   1

◆ VMEM_POPULATE_RESERVE

#define VMEM_POPULATE_RESERVE    (VMEM_POPULATE_SEGS_PER_ARENA * VMEM_POPULATE_LOCKS)

◆ VMEM_POPULATE_SEGS_PER_ARENA

#define VMEM_POPULATE_SEGS_PER_ARENA   4

◆ VMEM_SEG_INITIAL

#define VMEM_SEG_INITIAL   100 /* early segments */

Referenced by vmem_init().

◆ VMEM_SEGS_PER_ALLOC_MAX

#define VMEM_SEGS_PER_ALLOC_MAX    (VMEM_SEGS_PER_SPAN_CREATE + VMEM_SEGS_PER_MIDDLE_ALLOC)

Referenced by vmem_xalloc().

◆ VMEM_SEGS_PER_EXACT_ALLOC

#define VMEM_SEGS_PER_EXACT_ALLOC   0

Referenced by vmem_xalloc().

◆ VMEM_SEGS_PER_LEFT_ALLOC

#define VMEM_SEGS_PER_LEFT_ALLOC   1

◆ VMEM_SEGS_PER_MIDDLE_ALLOC

#define VMEM_SEGS_PER_MIDDLE_ALLOC   2

◆ VMEM_SEGS_PER_RIGHT_ALLOC

#define VMEM_SEGS_PER_RIGHT_ALLOC   1

◆ VMEM_SEGS_PER_SPAN_CREATE

#define VMEM_SEGS_PER_SPAN_CREATE   2

Referenced by vmem_xalloc().

Function Documentation

◆ _cond_wait()

int _cond_wait ( cond_t * cv,
mutex_t * mutex )
extern

◆ _vmem_extend_alloc()

void * _vmem_extend_alloc ( vmem_t * vmp,
void * vaddr,
size_t size,
size_t alloc,
int vmflag )

◆ vmem_add()

void * vmem_add ( vmem_t * vmp,
void * vaddr,
size_t size,
int vmflag )

◆ vmem_alloc()

void * vmem_alloc ( vmem_t * vmp,
size_t size,
int vmflag )

◆ vmem_contains()

int vmem_contains ( vmem_t * vmp,
void * vaddr,
size_t size )

◆ vmem_create()

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_destroy()

void vmem_destroy ( vmem_t * vmp)

◆ vmem_free()

void vmem_free ( vmem_t * vmp,
void * vaddr,
size_t size )

◆ vmem_init()

vmem_t * vmem_init ( const char * parent_name,
size_t parent_quantum,
vmem_alloc_t * parent_alloc,
vmem_free_t * parent_free,
const char * heap_name,
void * heap_start,
size_t heap_size,
size_t heap_quantum,
vmem_alloc_t * heap_alloc,
vmem_free_t * heap_free )

◆ vmem_lockup()

void vmem_lockup ( void )

◆ vmem_no_debug()

void vmem_no_debug ( void )

References offsetof, P2ROUNDUP, and vmem_seg_size.

Referenced by umem_init().

◆ vmem_reap()

void vmem_reap ( void )

References IN_POPULATE, and umem_reap().

Referenced by vmem_xalloc().

◆ vmem_release()

void vmem_release ( void )

◆ vmem_size()

size_t vmem_size ( vmem_t * vmp,
int typemask )

◆ vmem_startup()

void vmem_startup ( void )

References vmem_heap, vmem_heap_alloc, and vmem_heap_free.

Referenced by umem_startup().

◆ vmem_update()

void vmem_update ( void * dummy)

◆ vmem_walk()

void vmem_walk ( vmem_t * vmp,
int typemask,
void(*)(void *, void *, size_t) func,
void * arg )

◆ vmem_xalloc()

void * vmem_xalloc ( vmem_t * vmp,
size_t size,
size_t align,
size_t phase,
size_t nocross,
void * minaddr,
void * maxaddr,
int vmflag )

◆ vmem_xfree()

void vmem_xfree ( vmem_t * vmp,
void * vaddr,
size_t size )

Variable Documentation

◆ vmem_heap

vmem_t* vmem_heap

◆ vmem_heap_alloc

vmem_alloc_t* vmem_heap_alloc

◆ vmem_heap_free

vmem_free_t* vmem_heap_free

◆ vmem_mtbf

uint32_t vmem_mtbf

Referenced by vmem_alloc(), and vmem_xalloc().

◆ vmem_seg_size

size_t vmem_seg_size = sizeof (vmem_seg_t)

Referenced by vmem_no_debug().