#include "config.h"
#include <umem_impl.h>
#include <sys/vmem_impl_user.h>
#include "umem_base.h"
#include "vmem_base.h"
#include <sys/sysmacros.h>
#include <errno.h>
#include <limits.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <strings.h>
#include <signal.h>
#include <unistd.h>
#include "misc.h"
#define ALLOC_TABLE_1024 |
#define ALLOC_TABLE_4 &umem_null_cache, &umem_null_cache, &umem_null_cache, &umem_null_cache |
#define ALLOC_TABLE_64 |
#define CPU | ( | mask | ) | (umem_cpus + (CPUHINT() & (mask))) |
Referenced by _umem_cache_alloc(), and _umem_cache_free().
#define CPUHINT | ( | ) | (_thr_self()) |
#define CPUHINT_MAX | ( | ) | INT_MAX |
Referenced by umem_init().
#define IN_REAP | ( | ) | IN_UPDATE() |
#define IN_UPDATE | ( | ) |
Value:
(thr_self() == umem_update_thr || \ thr_self() == umem_st_update_thr)
#define NUM_ALLOC_SIZES (sizeof (umem_alloc_sizes) / sizeof (*umem_alloc_sizes)) |
#define UMEM_AUDIT | ( | lp, | |||
cp, | |||||
bcp | ) |
Value:
{ \ umem_bufctl_audit_t *_bcp = (umem_bufctl_audit_t *)(bcp); \ _bcp->bc_timestamp = gethrtime(); \ _bcp->bc_thread = thr_self(); \ _bcp->bc_depth = getpcstack(_bcp->bc_stack, umem_stack_depth, \ (cp != NULL) && (cp->cache_flags & UMF_CHECKSIGNAL)); \ _bcp->bc_lastlog = umem_log_enter((lp), _bcp, \ UMEM_BUFCTL_AUDIT_SIZE); \ }
#define UMEM_MAXBUF 16384 |
Referenced by malloc(), and memalign().
#define UMEM_VMFLAGS | ( | umflag | ) | (VM_NOSLEEP) |
Referenced by _umem_alloc(), and _umem_alloc_align().
#define UMERR_BADADDR 3 |
#define UMERR_BADBASE 8 |
#define UMERR_BADBUFCTL 5 |
#define UMERR_BADBUFTAG 4 |
#define UMERR_BADCACHE 6 |
#define UMERR_BADSIZE 7 |
Referenced by _umem_free().
#define UMERR_DUPFREE 2 |
Referenced by _umem_free().
#define UMERR_MODIFIED 0 |
#define UMERR_REDZONE 1 |
Referenced by _umem_free().
thread_t _thr_self | ( | void | ) |
void* _umem_alloc | ( | size_t | size, | |
int | umflag | |||
) |
References _umem_cache_alloc(), ASSERT, umem_cache::cache_flags, UMEM_ALIGN_SHIFT, UMEM_BUFTAG, umem_init(), UMEM_REDZONE_BYTE, UMEM_SIZE_ENCODE, UMEM_VMFLAGS, and vmem_alloc().
Referenced by _umem_zalloc(), and malloc().
void* _umem_alloc_align | ( | size_t | size, | |
size_t | align, | |||
int | umflag | |||
) |
References ASSERT, UMEM_ALIGN, umem_init(), UMEM_VMFLAGS, and vmem_xalloc().
void* _umem_cache_alloc | ( | umem_cache_t * | cp, | |
int | umflag | |||
) |
References atomic_add_64, umem_cache::cache_alloc_fail, umem_cache::cache_constructor, umem_cache::cache_cpu_mask, umem_cache::cache_empty, umem_cache::cache_flags, umem_cache::cache_full, umem_cache::cache_private, umem_cpu_cache::cc_alloc, umem_cpu_cache::cc_flags, umem_cpu_cache::cc_loaded, umem_cpu_cache::cc_lock, umem_cpu_cache::cc_magsize, umem_cpu_cache::cc_ploaded, umem_cpu_cache::cc_prounds, umem_cpu_cache::cc_rounds, CPU, umem_magazine::mag_round, mutex_lock, mutex_unlock, UMEM_CPU_CACHE, and UMEM_DEFAULT.
Referenced by _umem_alloc(), _umem_cache_free(), _umem_zalloc(), and vmem_alloc().
void _umem_cache_free | ( | umem_cache_t * | cp, | |
void * | buf | |||
) |
References _umem_cache_alloc(), _umem_cache_free(), umem_cache::cache_cpu_mask, umem_cache::cache_destructor, umem_cache::cache_empty, umem_cache::cache_flags, umem_cache::cache_full, umem_cache::cache_magtype, umem_cache::cache_private, umem_cpu_cache::cc_flags, umem_cpu_cache::cc_free, umem_cpu_cache::cc_loaded, umem_cpu_cache::cc_lock, umem_cpu_cache::cc_magsize, umem_cpu_cache::cc_ploaded, umem_cpu_cache::cc_prounds, umem_cpu_cache::cc_rounds, CPU, umem_magazine::mag_round, umem_magtype::mt_cache, umem_magtype::mt_magsize, mutex_lock, mutex_unlock, UMEM_CPU_CACHE, and UMEM_DEFAULT.
Referenced by _umem_cache_free(), _umem_free(), and vmem_free().
void _umem_free | ( | void * | buf, | |
size_t | size | |||
) |
void _umem_free_align | ( | void * | buf, | |
size_t | size | |||
) |
References vmem_xfree().
void* _umem_zalloc | ( | size_t | size, | |
int | umflag | |||
) |
void umem_cache_applyall | ( | void(*)(umem_cache_t *) | func | ) |
References umem_cache::cache_next, mutex_lock, mutex_unlock, and umem_cache_lock.
Referenced by umem_init().
umem_cache_t* umem_cache_create | ( | char * | name, | |
size_t | bufsize, | |||
size_t | align, | |||
umem_constructor_t * | constructor, | |||
umem_destructor_t * | destructor, | |||
umem_reclaim_t * | reclaim, | |||
void * | private, | |||
vmem_t * | vmp, | |||
int | cflags | |||
) |
References ASSERT, umem_cache::cache_align, umem_cache::cache_arena, umem_cache::cache_bufctl, umem_cache::cache_bufctl_cache, umem_cache::cache_bufsize, umem_cache::cache_buftag, umem_cache::cache_cflags, umem_cache::cache_chunksize, umem_cache::cache_color, umem_cache::cache_constructor, umem_cache::cache_contents, umem_cache::cache_cpu, umem_cache::cache_cpu_mask, umem_cache::cache_depot_lock, umem_cache::cache_destructor, umem_cache::cache_flags, umem_cache::cache_freelist, umem_cache::cache_hash_mask, umem_cache::cache_hash_shift, umem_cache::cache_hash_table, umem_cache::cache_lock, umem_cache::cache_magtype, umem_cache::cache_maxcolor, umem_cache::cache_mincolor, umem_cache::cache_name, umem_cache::cache_next, umem_cache::cache_nullslab, umem_cache::cache_prev, umem_cache::cache_private, umem_cache::cache_reclaim, umem_cache::cache_slabsize, umem_cache::cache_verify, umem_cpu_cache::cc_flags, umem_cpu_cache::cc_lock, umem_cpu_cache::cc_prounds, umem_cpu_cache::cc_rounds, highbit(), MAX, MIN, umem_magtype::mt_minbuf, mutex_destroy, mutex_init, mutex_lock, mutex_unlock, P2NPHASE, P2PHASE, P2ROUNDUP, umem_slab::slab_cache, umem_slab::slab_next, umem_slab::slab_prev, umem_slab::slab_refcnt, thr_self, UMC_INTERNAL, UMC_NODEBUG, UMC_NOHASH, UMC_NOMAGAZINE, UMC_NOTOUCH, UMC_QCACHE, UMEM_ALIGN, umem_cache_lock, UMEM_CACHE_SIZE, umem_content_maxsave, UMEM_CPU_CACHE_SIZE, umem_flags, umem_flags_lock, UMEM_HASH_INITIAL, umem_init(), umem_init_thr, umem_lite_maxalign, umem_lite_minsize, umem_maxverify, umem_minfirewall, UMEM_READY, umem_ready, UMEM_SECOND_ALIGN, UMEM_VOID_FRACTION, UMF_AUDIT, UMF_DEADBEEF, UMF_DEBUG, UMF_FIREWALL, UMF_LITE, UMF_NOMAGAZINE, UMF_RANDOM, UMF_RANDOMIZE, UMF_REDZONE, UMF_TOUCH, VM_NOSLEEP, vmem::vm_qcache_max, vmem::vm_quantum, vmem_alloc(), vmem_xalloc(), and vmem_xfree().
Referenced by vmem_create().
void umem_cache_destroy | ( | umem_cache_t * | cp | ) |
void umem_cache_update | ( | umem_cache_t * | cp | ) |
References ASSERT, umem_cache::cache_buftotal, umem_cache::cache_chunksize, umem_cache::cache_depot_contention, umem_cache::cache_depot_contention_prev, umem_cache::cache_depot_lock, umem_cache::cache_flags, umem_cache::cache_hash_mask, umem_cache::cache_lock, umem_cache::cache_magtype, umem_magtype::mt_maxbuf, MUTEX_HELD, mutex_lock, mutex_unlock, umem_cache_lock, umem_depot_contention, UMEM_HASH_INITIAL, UMU_HASH_RESCALE, and UMU_MAGAZINE_RESIZE.
int umem_init | ( | void | ) |
References _cond_wait, ASSERT, cond_broadcast, umem_cpu::cpu_cache_offset, umem_cpu::cpu_number, CPUHINT_MAX, issetugid, log_message(), mutex_lock, mutex_unlock, NANOSEC, pagesize, thr_self, UMEM_ALIGN, umem_cache_applyall(), UMEM_CACHE_SIZE, umem_content_log_size, UMEM_CPU_CACHE_SIZE, umem_failure_log_size, umem_flags, umem_get_max_ncpus(), umem_init_cv, umem_init_env_ready, umem_init_lock, umem_init_thr, umem_logging, umem_maxverify, umem_minfirewall, umem_mtbf, umem_panic(), umem_process_envvars(), UMEM_READY, umem_ready, UMEM_READY_INIT_FAILED, UMEM_READY_INITING, UMEM_READY_STARTUP, umem_reap_next, umem_setup_envvars(), umem_slab_log_size, umem_transaction_log_size, umem_update_next, UMF_AUDIT, VM_NOSLEEP, vmem::vm_quantum, vmem_alloc(), vmem_create(), vmem_free(), vmem_heap_arena(), and vmem_no_debug().
Referenced by _umem_alloc(), _umem_alloc_align(), memalign(), umem_cache_create(), and vmem_heap_arena().
void umem_nofail_callback | ( | umem_nofail_callback_t * | cb | ) |
void umem_process_updates | ( | void | ) |
void umem_reap | ( | void | ) |
References ASSERT, cond_broadcast, mutex_lock, mutex_unlock, umem_create_update_thread(), UMEM_READY, umem_ready, UMEM_REAP_ACTIVE, UMEM_REAP_ADDING, UMEM_REAP_DONE, umem_reap_next, umem_reaping, umem_st_update_thr, umem_update_cv, umem_update_lock, umem_update_thr, and UMU_REAP.
Referenced by main(), and vmem_reap().
void umem_startup | ( | caddr_t | start, | |
size_t | len, | |||
size_t | pagesize, | |||
caddr_t | minstack, | |||
caddr_t | maxstack | |||
) |
References umem_cpu::cpu_cache_offset, umem_cpu::cpu_number, UMEM_ALIGN_SHIFT, UMEM_CACHE_SIZE, umem_forkhandler_init(), umem_init_env_ready, umem_ready, UMEM_READY_STARTUP, umem_type_init(), and vmem_startup().
Referenced by __attribute__(), and main().
size_t pagesize |
Referenced by umem_init(), umem_type_init(), valloc(), and vmem_mmap_arena().
uint_t umem_abort = 1 |
Referenced by umem_err_recoverable().
struct { ... } umem_abort_info |
mutex_t umem_cache_lock = DEFAULTMUTEX |
Referenced by umem_cache_applyall(), umem_cache_create(), umem_cache_destroy(), and umem_cache_update().
size_t umem_content_log_size |
Referenced by umem_init().
size_t umem_content_maxsave = 256 |
Referenced by umem_cache_create().
Referenced by umem_cache_update().
size_t umem_failure_log_size |
Referenced by umem_init().
uint_t umem_flags = 0 |
Referenced by umem_cache_create(), and umem_init().
mutex_t umem_flags_lock = DEFAULTMUTEX |
Referenced by umem_cache_create().
cond_t umem_init_cv = DEFAULTCV |
Referenced by umem_init().
Referenced by umem_init(), and umem_startup().
mutex_t umem_init_lock = DEFAULTMUTEX |
Referenced by umem_init().
Referenced by umem_cache_create(), umem_init(), and vmem_heap_arena().
size_t umem_lite_maxalign = 1024 |
Referenced by umem_cache_create().
size_t umem_lite_minsize = 0 |
Referenced by umem_cache_create().
uint_t umem_logging = 0 |
Referenced by umem_init().
uint32_t umem_max_ncpus |
caddr_t umem_max_stack |
Referenced by getpcstack().
size_t umem_maxverify |
Referenced by umem_cache_create(), and umem_init().
Referenced by memalign().
caddr_t umem_min_stack |
Referenced by getpcstack().
size_t umem_minfirewall |
Referenced by umem_cache_create(), and umem_init().
uint32_t umem_mtbf = 0 |
Referenced by umem_init().
uint_t umem_output = 0 |
Referenced by log_message(), and umem_error_enter().
int umem_ready = UMEM_READY_STARTUP |
Referenced by umem_cache_create(), umem_init(), umem_reap(), umem_startup(), and vmem_heap_arena().
uint32_t umem_reap_interval = 10 |
volatile hrtime_t umem_reap_next |
Referenced by umem_init(), and umem_reap().
volatile uint32_t umem_reaping |
Referenced by umem_reap().
size_t umem_slab_log_size |
Referenced by umem_init().
volatile thread_t umem_st_update_thr |
Referenced by umem_reap().
uint32_t umem_stack_depth = 15 |
size_t umem_transaction_log_size |
Referenced by umem_init().
cond_t umem_update_cv = DEFAULTCV |
Referenced by umem_process_updates(), and umem_reap().
mutex_t umem_update_lock = DEFAULTMUTEX |
Referenced by umem_create_update_thread(), umem_process_updates(), and umem_reap().
struct timeval umem_update_next |
Referenced by umem_init().
Referenced by umem_create_update_thread(), and umem_reap().
void* ump_buffer |
int ump_error |
void* ump_realbuf |