|
umem
1.0.1
|
#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_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_update (void *dummy) |
| void | vmem_startup (void) |
| 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_no_debug (void) |
| void | vmem_lockup (void) |
| void | vmem_release (void) |
Variables | |
| vmem_t * | vmem_heap |
| vmem_alloc_t * | vmem_heap_alloc |
| vmem_free_t * | vmem_heap_free |
| uint32_t | vmem_mtbf |
| size_t | vmem_seg_size = sizeof (vmem_seg_t) |
| #define IN_POPULATE | ( | ) | (vmem_nosleep_lock.vmpl_thr == thr_self()) |
Referenced by vmem_reap().
| #define VMEM_DELETE | ( | vsp, | |
| type | |||
| ) |
| #define VMEM_INITIAL 6 /* early vmem arenas */ |
| #define VMEM_INSERT | ( | vprev, | |
| vsp, | |||
| type | |||
| ) |
Referenced by vmem_walk().
| #define VMEM_MINFREE (VMEM_POPULATE_RESERVE + VMEM_SEGS_PER_ALLOC_MAX) |
| #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 */ |
| #define VMEM_SEGS_PER_ALLOC_MAX (VMEM_SEGS_PER_SPAN_CREATE + VMEM_SEGS_PER_MIDDLE_ALLOC) |
| #define VMEM_SEGS_PER_EXACT_ALLOC 0 |
| #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 |
| void* _vmem_extend_alloc | ( | vmem_t * | vmp, |
| void * | vaddr, | ||
| size_t | size, | ||
| size_t | alloc, | ||
| int | vmflag | ||
| ) |
References ASSERT, mutex_lock, vmem::vm_lock, vmem::vm_quantum, and vmem_contains().
| void* vmem_add | ( | vmem_t * | vmp, |
| void * | vaddr, | ||
| size_t | size, | ||
| int | vmflag | ||
| ) |
References ASSERT, mutex_lock, umem_panic(), vmem::vm_lock, and vmem_contains().
| void* vmem_alloc | ( | vmem_t * | vmp, |
| size_t | size, | ||
| int | vmflag | ||
| ) |
References _umem_cache_alloc(), ASSERT, UMEM_DEFAULT, vmem::vm_mtbf, VM_NOSLEEP, vmem::vm_qcache, vmem::vm_qcache_max, vmem::vm_qshift, and vmem_mtbf.
| int vmem_contains | ( | vmem_t * | vmp, |
| void * | vaddr, | ||
| size_t | size | ||
| ) |
References ASSERT, mutex_lock, mutex_unlock, vmem_kstat::vk_contains, vmem_kstat::vk_contains_search, vmem::vm_kstat, vmem::vm_lock, vmem::vm_seg0, VMEM_SPAN, vmem_seg::vs_end, vmem_seg::vs_knext, vmem_seg::vs_start, and vmem_seg::vs_type.
Referenced by _vmem_extend_alloc(), and vmem_add().
| 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.
| void vmem_destroy | ( | vmem_t * | vmp | ) |
References mutex_lock, and vmem::vm_seg0.
| void vmem_free | ( | vmem_t * | vmp, |
| void * | vaddr, | ||
| size_t | size | ||
| ) |
References _umem_cache_free(), vmem::vm_qcache, vmem::vm_qcache_max, vmem::vm_qshift, and vmem_xfree().
| 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 | ) |
References mutex_lock.
| 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().
| void vmem_release | ( | void | ) |
References mutex_unlock.
| size_t vmem_size | ( | vmem_t * | vmp, |
| int | typemask | ||
| ) |
References vmem_kstat::vk_mem_inuse, vmem_kstat::vk_mem_total, vmem::vm_kstat, VMEM_ALLOC, and VMEM_FREE.
| void vmem_startup | ( | void | ) |
| void vmem_update | ( | void * | dummy | ) |
References mutex_lock.
| void vmem_walk | ( | vmem_t * | vmp, |
| int | typemask, | ||
| void(*)(void *, void *, size_t) | func, | ||
| void * | arg | ||
| ) |
References mutex_lock, vmem::vm_lock, vmem::vm_seg0, VMEM_INSERT, VMEM_REENTRANT, VMEM_WALKER, vmem_seg::vs_anext, VS_SIZE, vmem_seg::vs_start, and vmem_seg::vs_type.
| 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().
| 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().
| vmem_t* vmem_heap |
Referenced by vmem_heap_arena().
| vmem_alloc_t* vmem_heap_alloc |
Referenced by vmem_heap_arena().
| vmem_free_t* vmem_heap_free |
Referenced by vmem_heap_arena().
| 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().
1.8.14