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

◆ ALLOC_TABLE_1024

#define ALLOC_TABLE_1024

◆ ALLOC_TABLE_4

◆ ALLOC_TABLE_64

#define ALLOC_TABLE_64
Value:

◆ CPU

#define CPU (   mask)    (umem_cpus + (CPUHINT() & (mask)))

◆ CPUHINT

#define CPUHINT ( )    (_thr_self())

◆ CPUHINT_MAX

#define CPUHINT_MAX ( )    INT_MAX

◆ IN_REAP

#define IN_REAP ( )    IN_UPDATE()

◆ IN_UPDATE

#define IN_UPDATE ( )
Value:
thr_self() == umem_st_update_thr)
#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

◆ NUM_ALLOC_SIZES

#define NUM_ALLOC_SIZES   (sizeof (umem_alloc_sizes) / sizeof (*umem_alloc_sizes))

◆ UMEM_AUDIT

#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, \
}
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
#define UMEM_BUFCTL_AUDIT_SIZE
Definition: umem_impl.h:167

◆ UMEM_MAXBUF

#define UMEM_MAXBUF   16384

Referenced by malloc(), and memalign().

◆ UMEM_VMFLAGS

#define UMEM_VMFLAGS (   umflag)    (VM_NOSLEEP)

◆ UMERR_BADADDR

#define UMERR_BADADDR   3 /* freed a bad (unallocated) address */

◆ UMERR_BADBASE

#define UMERR_BADBASE   8 /* buffer base address wrong */

◆ UMERR_BADBUFCTL

#define UMERR_BADBUFCTL   5 /* bufctl corrupted */

◆ UMERR_BADBUFTAG

#define UMERR_BADBUFTAG   4 /* buftag corrupted */

◆ UMERR_BADCACHE

#define UMERR_BADCACHE   6 /* freed a buffer to the wrong cache */

◆ UMERR_BADSIZE

#define UMERR_BADSIZE   7 /* alloc size != free size */

◆ UMERR_DUPFREE

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

◆ UMERR_MODIFIED

#define UMERR_MODIFIED   0 /* buffer modified while on freelist */

◆ UMERR_REDZONE

#define UMERR_REDZONE   1 /* redzone violation (write past end of buf) */

Function Documentation

◆ _cond_wait()

int _cond_wait ( cond_t cv,
mutex_t mutex 
)

Referenced by umem_init().

◆ _thr_self()

thread_t _thr_self ( void  )

◆ _umem_alloc()

void* _umem_alloc ( size_t  size,
int  umflag 
)

References UMEM_ALIGN_SHIFT.

Referenced by malloc().

◆ _umem_alloc_align()

void* _umem_alloc_align ( size_t  size,
size_t  align,
int  umflag 
)

◆ _umem_cache_alloc()

void* _umem_cache_alloc ( umem_cache_t cp,
int  umflag 
)

◆ _umem_cache_free()

void _umem_cache_free ( umem_cache_t cp,
void *  buf 
)

◆ _umem_free()

void _umem_free ( void *  buf,
size_t  size 
)

References UMEM_ALIGN_SHIFT.

◆ _umem_free_align()

void _umem_free_align ( void *  buf,
size_t  size 
)

◆ _umem_zalloc()

void* _umem_zalloc ( size_t  size,
int  umflag 
)

References UMEM_ALIGN_SHIFT.

◆ umem_cache_applyall()

void umem_cache_applyall ( void(*)(umem_cache_t *)  func)

◆ umem_cache_create()

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 
)

◆ umem_cache_destroy()

void umem_cache_destroy ( umem_cache_t cp)

◆ umem_cache_update()

void umem_cache_update ( umem_cache_t cp)

◆ umem_init()

int umem_init ( void  )

◆ umem_nofail_callback()

void umem_nofail_callback ( umem_nofail_callback_t cb)

◆ umem_process_updates()

void umem_process_updates ( void  )

◆ umem_reap()

void umem_reap ( void  )

Referenced by vmem_reap().

◆ umem_startup()

void umem_startup ( caddr_t  start,
size_t  len,
size_t  pagesize,
caddr_t  minstack,
caddr_t  maxstack 
)

Variable Documentation

◆ pagesize

size_t pagesize

◆ umem_abort

uint_t umem_abort = 1

◆ umem_abort_info

struct { ... } umem_abort_info

◆ umem_cache_lock

mutex_t umem_cache_lock = DEFAULTMUTEX

◆ umem_content_log

umem_log_header_t* umem_content_log

◆ umem_content_log_size

size_t umem_content_log_size

◆ umem_content_maxsave

size_t umem_content_maxsave = 256

◆ umem_depot_contention

uint_t umem_depot_contention = 2

◆ umem_failure_log

umem_log_header_t* umem_failure_log

◆ umem_failure_log_size

size_t umem_failure_log_size

◆ umem_flags

uint_t umem_flags = 0

Referenced by umem_init().

◆ umem_flags_lock

mutex_t umem_flags_lock = DEFAULTMUTEX

◆ umem_init_cv

cond_t umem_init_cv = DEFAULTCV

Referenced by umem_init().

◆ umem_init_env_ready

int umem_init_env_ready

Referenced by umem_init(), and umem_startup().

◆ umem_init_lock

mutex_t umem_init_lock = DEFAULTMUTEX

Referenced by umem_init().

◆ umem_init_thr

thread_t umem_init_thr

◆ umem_lite_maxalign

size_t umem_lite_maxalign = 1024

◆ umem_lite_minsize

size_t umem_lite_minsize = 0

◆ umem_logging

uint_t umem_logging = 0

◆ umem_max_ncpus

uint32_t umem_max_ncpus

Referenced by umem_cache_create(), and umem_init().

◆ umem_max_stack

caddr_t umem_max_stack

Referenced by getpcstack(), and umem_startup().

◆ umem_maxverify

size_t umem_maxverify

◆ umem_memalign_arena

vmem_t* umem_memalign_arena

◆ umem_min_stack

caddr_t umem_min_stack

Referenced by getpcstack(), and umem_startup().

◆ umem_minfirewall

size_t umem_minfirewall

◆ umem_mtbf

uint32_t umem_mtbf = 0

Referenced by umem_init().

◆ umem_null_cache

umem_cache_t umem_null_cache

◆ umem_output

uint_t umem_output = 0

Referenced by log_message(), and umem_error_enter().

◆ umem_ready

int umem_ready = UMEM_READY_STARTUP

◆ umem_reap_interval

uint32_t umem_reap_interval = 10

◆ umem_reap_next

volatile hrtime_t umem_reap_next

◆ umem_reaping

volatile uint32_t umem_reaping

◆ umem_slab_log

umem_log_header_t* umem_slab_log

◆ umem_slab_log_size

size_t umem_slab_log_size

◆ umem_st_update_thr

volatile thread_t umem_st_update_thr

◆ umem_stack_depth

uint32_t umem_stack_depth = 15

◆ umem_transaction_log

umem_log_header_t* umem_transaction_log

◆ umem_transaction_log_size

size_t umem_transaction_log_size

◆ umem_update_cv

cond_t umem_update_cv = DEFAULTCV

◆ umem_update_lock

mutex_t umem_update_lock = DEFAULTMUTEX

◆ umem_update_next

struct timeval umem_update_next

◆ umem_update_thr

thread_t umem_update_thr

◆ ump_bufctl

umem_bufctl_t* ump_bufctl

◆ ump_buffer

void* ump_buffer

◆ ump_cache

umem_cache_t* ump_cache

◆ ump_error

int ump_error

◆ ump_realbuf

void* ump_realbuf

◆ ump_realcache

umem_cache_t* ump_realcache

◆ ump_slab

umem_slab_t* ump_slab

◆ ump_timestamp

hrtime_t ump_timestamp