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); \
}

◆ VMEM_INITIAL

#define VMEM_INITIAL   6 /* early vmem arenas */

◆ 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_walk().

◆ VMEM_MINFREE

#define VMEM_MINFREE   (VMEM_POPULATE_RESERVE + VMEM_SEGS_PER_ALLOC_MAX)

◆ 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 */

◆ VMEM_SEGS_PER_ALLOC_MAX

#define VMEM_SEGS_PER_ALLOC_MAX   (VMEM_SEGS_PER_SPAN_CREATE + VMEM_SEGS_PER_MIDDLE_ALLOC)

◆ VMEM_SEGS_PER_EXACT_ALLOC

#define VMEM_SEGS_PER_EXACT_ALLOC   0

◆ 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

Function Documentation

◆ _cond_wait()

int _cond_wait ( cond_t cv,
mutex_t mutex 
)

◆ _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 
)

References atomic_add_32_nv.

◆ vmem_destroy()

void vmem_destroy ( vmem_t vmp)

References mutex_lock, and vmem::vm_seg0.

◆ 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  )

References mutex_lock.

◆ 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().

◆ vmem_release()

void vmem_release ( void  )

References mutex_unlock.

◆ vmem_size()

size_t vmem_size ( vmem_t vmp,
int  typemask 
)

◆ vmem_startup()

void vmem_startup ( void  )

◆ vmem_update()

void vmem_update ( void *  dummy)

References mutex_lock.

◆ 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 
)

References P2ROUNDUP, umem_panic(), and vmem_mtbf.

Referenced by memalign().

◆ vmem_xfree()

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

References mutex_lock, and vmem::vm_lock.

Referenced by _umem_free_align(), and vmem_free().

Variable Documentation

◆ vmem_heap

vmem_t* vmem_heap

Referenced by vmem_heap_arena().

◆ vmem_heap_alloc

vmem_alloc_t* vmem_heap_alloc

Referenced by vmem_heap_arena().

◆ vmem_heap_free

vmem_free_t* vmem_heap_free

Referenced by vmem_heap_arena().

◆ 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().