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

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

Referenced by vmem_reap().

#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); \
}
struct vmem_seg vmem_seg_t
Definition: vmem_impl_user.h:55

Referenced by vmem_destroy().

#define VMEM_INITIAL   6 /* early vmem arenas */

Referenced by vmem_create().

#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); \
}
struct vmem_seg vmem_seg_t
Definition: vmem_impl_user.h:55

Referenced by vmem_create(), and vmem_walk().

#define VMEM_MINFREE   (VMEM_POPULATE_RESERVE + VMEM_SEGS_PER_ALLOC_MAX)

Referenced by vmem_alloc(), and vmem_xalloc().

#define VMEM_POPULATE_LOCKS   1
#define VMEM_POPULATE_RESERVE   (VMEM_POPULATE_SEGS_PER_ARENA * VMEM_POPULATE_LOCKS)
#define VMEM_POPULATE_SEGS_PER_ARENA   4
#define VMEM_SEG_INITIAL   100 /* early segments */

Referenced by vmem_init().

#define VMEM_SEGS_PER_ALLOC_MAX   (VMEM_SEGS_PER_SPAN_CREATE + VMEM_SEGS_PER_MIDDLE_ALLOC)

Referenced by vmem_xalloc().

#define VMEM_SEGS_PER_EXACT_ALLOC   0

Referenced by vmem_xalloc().

#define VMEM_SEGS_PER_LEFT_ALLOC   1
#define VMEM_SEGS_PER_MIDDLE_ALLOC   2
#define VMEM_SEGS_PER_RIGHT_ALLOC   1
#define VMEM_SEGS_PER_SPAN_CREATE   2

Referenced by vmem_xalloc().

Function Documentation

int _cond_wait ( cond_t cv,
mutex_t mutex 
)

Referenced by vmem_xalloc().

void* _vmem_extend_alloc ( vmem_t vmp,
void *  vaddr,
size_t  size,
size_t  alloc,
int  vmflag 
)
void* vmem_add ( vmem_t vmp,
void *  vaddr,
size_t  size,
int  vmflag 
)
void* vmem_alloc ( vmem_t vmp,
size_t  size,
int  vmflag 
)
int vmem_contains ( vmem_t vmp,
void *  vaddr,
size_t  size 
)
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 
)
void vmem_destroy ( vmem_t vmp)
void vmem_free ( vmem_t vmp,
void *  vaddr,
size_t  size 
)
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 
)
void vmem_lockup ( void  )
void vmem_no_debug ( void  )

References offsetof, P2ROUNDUP, and vmem_seg_size.

Referenced by umem_init().

void vmem_reap ( void  )

References IN_POPULATE, and umem_reap().

Referenced by vmem_xalloc().

void vmem_release ( void  )
size_t vmem_size ( vmem_t vmp,
int  typemask 
)
void vmem_startup ( void  )

References vmem_heap_alloc, and vmem_heap_free.

Referenced by umem_startup().

void vmem_update ( void *  dummy)
void vmem_walk ( vmem_t vmp,
int  typemask,
void(*)(void *, void *, size_t)  func,
void *  arg 
)
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 
)

Variable Documentation

vmem_t* vmem_heap

Referenced by vmem_heap_arena().

vmem_alloc_t* vmem_heap_alloc
vmem_free_t* vmem_heap_free
uint32_t vmem_mtbf

Referenced by vmem_alloc(), and vmem_xalloc().

size_t vmem_seg_size = sizeof (vmem_seg_t)

Referenced by vmem_no_debug().