umem  1.0.1
Macros | Functions | Variables
umem.c File Reference
#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"

Macros

#define UMEM_VMFLAGS(umflag)   (VM_NOSLEEP)
 
#define NUM_ALLOC_SIZES   (sizeof (umem_alloc_sizes) / sizeof (*umem_alloc_sizes))
 
#define UMEM_MAXBUF   16384
 
#define CPUHINT()   (_thr_self())
 
#define CPUHINT_MAX()   INT_MAX
 
#define CPU(mask)   (umem_cpus + (CPUHINT() & (mask)))
 
#define IN_UPDATE()
 
#define IN_REAP()   IN_UPDATE()
 
#define ALLOC_TABLE_4   &umem_null_cache, &umem_null_cache, &umem_null_cache, &umem_null_cache
 
#define ALLOC_TABLE_64
 
#define ALLOC_TABLE_1024
 
#define UMERR_MODIFIED   0 /* buffer modified while on freelist */
 
#define UMERR_REDZONE   1 /* redzone violation (write past end of buf) */
 
#define UMERR_DUPFREE   2 /* freed a buffer twice */
 
#define UMERR_BADADDR   3 /* freed a bad (unallocated) address */
 
#define UMERR_BADBUFTAG   4 /* buftag corrupted */
 
#define UMERR_BADBUFCTL   5 /* bufctl corrupted */
 
#define UMERR_BADCACHE   6 /* freed a buffer to the wrong cache */
 
#define UMERR_BADSIZE   7 /* alloc size != free size */
 
#define UMERR_BADBASE   8 /* buffer base address wrong */
 
#define UMEM_AUDIT(lp, cp, bcp)
 

Functions

thread_t _thr_self (void)
 
int _cond_wait (cond_t *cv, mutex_t *mutex)
 
void umem_cache_applyall (void(*func)(umem_cache_t *))
 
void umem_nofail_callback (umem_nofail_callback_t *cb)
 
void * _umem_cache_alloc (umem_cache_t *cp, int umflag)
 
void _umem_cache_free (umem_cache_t *cp, void *buf)
 
void * _umem_zalloc (size_t size, int umflag)
 
void * _umem_alloc (size_t size, int umflag)
 
void * _umem_alloc_align (size_t size, size_t align, int umflag)
 
void _umem_free (void *buf, size_t size)
 
void _umem_free_align (void *buf, size_t size)
 
void umem_cache_update (umem_cache_t *cp)
 
void umem_process_updates (void)
 
void umem_reap (void)
 
umem_cache_tumem_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)
 
void umem_cache_destroy (umem_cache_t *cp)
 
void umem_startup (caddr_t start, size_t len, size_t pagesize, caddr_t minstack, caddr_t maxstack)
 
int umem_init (void)
 

Variables

size_t pagesize
 
uint32_t umem_max_ncpus
 
uint32_t umem_stack_depth = 15
 
uint32_t umem_reap_interval = 10
 
uint_t umem_depot_contention = 2
 
uint_t umem_abort = 1
 
uint_t umem_output = 0
 
uint_t umem_logging = 0
 
uint32_t umem_mtbf = 0
 
size_t umem_transaction_log_size
 
size_t umem_content_log_size
 
size_t umem_failure_log_size
 
size_t umem_slab_log_size
 
size_t umem_content_maxsave = 256
 
size_t umem_lite_minsize = 0
 
size_t umem_lite_maxalign = 1024
 
size_t umem_maxverify
 
size_t umem_minfirewall
 
uint_t umem_flags = 0
 
mutex_t umem_init_lock = DEFAULTMUTEX
 
cond_t umem_init_cv = DEFAULTCV
 
thread_t umem_init_thr
 
int umem_init_env_ready
 
int umem_ready = UMEM_READY_STARTUP
 
mutex_t umem_flags_lock = DEFAULTMUTEX
 
vmem_tumem_memalign_arena
 
umem_log_header_tumem_transaction_log
 
umem_log_header_tumem_content_log
 
umem_log_header_tumem_failure_log
 
umem_log_header_tumem_slab_log
 
volatile uint32_t umem_reaping
 
thread_t umem_update_thr
 
struct timeval umem_update_next
 
volatile thread_t umem_st_update_thr
 
mutex_t umem_update_lock = DEFAULTMUTEX
 
cond_t umem_update_cv = DEFAULTCV
 
volatile hrtime_t umem_reap_next
 
mutex_t umem_cache_lock = DEFAULTMUTEX
 
umem_cache_t umem_null_cache
 
caddr_t umem_min_stack
 
caddr_t umem_max_stack
 
struct {
   hrtime_t   ump_timestamp
 
   int   ump_error
 
   void *   ump_buffer
 
   void *   ump_realbuf
 
   umem_cache_t *   ump_cache
 
   umem_cache_t *   ump_realcache
 
   umem_slab_t *   ump_slab
 
   umem_bufctl_t *   ump_bufctl
 
umem_abort_info
 

Macro Definition Documentation

#define ALLOC_TABLE_1024
#define ALLOC_TABLE_64
#define CPU (   mask)    (umem_cpus + (CPUHINT() & (mask)))
#define CPUHINT ( )    (_thr_self())
#define CPUHINT_MAX ( )    INT_MAX

Referenced by umem_init().

#define IN_REAP ( )    IN_UPDATE()
#define IN_UPDATE ( )
Value:
#define thr_self()
Definition: sol_compat.h:58
volatile thread_t umem_st_update_thr
Definition: umem.c:544
thread_t umem_update_thr
Definition: umem.c:542
#define NUM_ALLOC_SIZES   (sizeof (umem_alloc_sizes) / sizeof (*umem_alloc_sizes))
#define UMEM_AUDIT (   lp,
  cp,
  bcp 
)
Value:
{ \
_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, \
}
int getpcstack(uintptr_t *pcstack, int pcstack_limit, int check_signal)
Definition: getpcstack.c:75
uint32_t umem_stack_depth
Definition: umem.c:464
Definition: umem_impl.h:150
#define thr_self()
Definition: sol_compat.h:58
#define UMF_CHECKSIGNAL
Definition: umem_impl.h:73
struct umem_bufctl_audit umem_bufctl_audit_t
hrtime_t bc_timestamp
Definition: umem_impl.h:155
#define UMEM_BUFCTL_AUDIT_SIZE
Definition: umem_impl.h:167
#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 /* freed a bad (unallocated) address */
#define UMERR_BADBASE   8 /* buffer base address wrong */
#define UMERR_BADBUFCTL   5 /* bufctl corrupted */
#define UMERR_BADBUFTAG   4 /* buftag corrupted */
#define UMERR_BADCACHE   6 /* freed a buffer to the wrong cache */
#define UMERR_BADSIZE   7 /* alloc size != free size */

Referenced by _umem_free().

#define UMERR_DUPFREE   2 /* freed a buffer twice */

Referenced by _umem_free().

#define UMERR_MODIFIED   0 /* buffer modified while on freelist */
#define UMERR_REDZONE   1 /* redzone violation (write past end of buf) */

Referenced by _umem_free().

Function Documentation

int _cond_wait ( cond_t cv,
mutex_t mutex 
)

Referenced by umem_init().

thread_t _thr_self ( void  )
void* _umem_alloc ( size_t  size,
int  umflag 
)
void* _umem_alloc_align ( size_t  size,
size_t  align,
int  umflag 
)
void* _umem_cache_alloc ( umem_cache_t cp,
int  umflag 
)
void _umem_cache_free ( umem_cache_t cp,
void *  buf 
)
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)
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_max_ncpus, umem_maxverify, umem_minfirewall, umem_null_cache, UMEM_READY, umem_ready, UMEM_SECOND_ALIGN, UMEM_VOID_FRACTION, UMF_AUDIT, UMF_BUFTAG, UMF_DEADBEEF, UMF_DEBUG, UMF_FIREWALL, UMF_HASH, 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)
int umem_init ( void  )
void umem_nofail_callback ( umem_nofail_callback_t cb)
void umem_process_updates ( void  )
void umem_reap ( void  )
void umem_startup ( caddr_t  start,
size_t  len,
size_t  pagesize,
caddr_t  minstack,
caddr_t  maxstack 
)

Variable Documentation

size_t pagesize
uint_t umem_abort = 1

Referenced by umem_err_recoverable().

struct { ... } umem_abort_info
mutex_t umem_cache_lock = DEFAULTMUTEX
umem_log_header_t* umem_content_log
size_t umem_content_log_size

Referenced by umem_init().

size_t umem_content_maxsave = 256

Referenced by umem_cache_create().

uint_t umem_depot_contention = 2

Referenced by umem_cache_update().

umem_log_header_t* umem_failure_log
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().

int umem_init_env_ready

Referenced by umem_init(), and umem_startup().

mutex_t umem_init_lock = DEFAULTMUTEX

Referenced by umem_init().

thread_t umem_init_thr
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().

vmem_t* umem_memalign_arena

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

umem_cache_t umem_null_cache

Referenced by umem_cache_create().

uint_t umem_output = 0

Referenced by log_message(), and umem_error_enter().

int umem_ready = UMEM_READY_STARTUP
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().

umem_log_header_t* umem_slab_log
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
umem_log_header_t* umem_transaction_log
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
struct timeval umem_update_next

Referenced by umem_init().

thread_t umem_update_thr
umem_bufctl_t* ump_bufctl
void* ump_buffer
umem_cache_t* ump_cache
int ump_error
void* ump_realbuf
umem_cache_t* ump_realcache
umem_slab_t* ump_slab
hrtime_t ump_timestamp