37#ifdef HAVE_SYS_SYSMACROS_H
38#include <sys/sysmacros.h>
63#define UMC_QCACHE 0x00100000
64#define UMC_INTERNAL 0x80000000
69#define UMF_AUDIT 0x00000001
70#define UMF_DEADBEEF 0x00000002
71#define UMF_REDZONE 0x00000004
72#define UMF_CONTENTS 0x00000008
73#define UMF_CHECKSIGNAL 0x00000010
74#define UMF_NOMAGAZINE 0x00000020
75#define UMF_FIREWALL 0x00000040
76#define UMF_LITE 0x00000100
78#define UMF_HASH 0x00000200
79#define UMF_RANDOMIZE 0x00000400
81#define UMF_BUFTAG (UMF_DEADBEEF | UMF_REDZONE)
82#define UMF_TOUCH (UMF_BUFTAG | UMF_LITE | UMF_CONTENTS)
83#define UMF_RANDOM (UMF_TOUCH | UMF_AUDIT | UMF_NOMAGAZINE)
84#define UMF_DEBUG (UMF_RANDOM | UMF_FIREWALL)
86#define UMEM_STACK_DEPTH umem_stack_depth
88#define UMEM_FREE_PATTERN 0xdeadbeefdeadbeefULL
89#define UMEM_UNINITIALIZED_PATTERN 0xbaddcafebaddcafeULL
90#define UMEM_REDZONE_PATTERN 0xfeedfacefeedfaceULL
91#define UMEM_REDZONE_BYTE 0xbb
93#define UMEM_FATAL_FLAGS (UMEM_NOFAIL)
94#define UMEM_SLEEP_FLAGS (0)
101#define UMEM_SIZE_ENCODE(x) (251 * (x) + 1)
102#define UMEM_SIZE_DECODE(x) ((x) / 251)
103#define UMEM_SIZE_VALID(x) ((x) % 251 == 1)
128#define UMEM_BUFCTL_AUDIT_SIZE_DEPTH(frames) \
129 ((size_t)(&((umem_bufctl_audit_t *)0)->bc_stack[frames]))
140#define UMEM_BUFCTL_AUDIT_ALIGN 32
142#define UMEM_BUFCTL_AUDIT_MAX_SIZE \
143 (P2ALIGN((PAGESIZE - sizeof (umem_slab_t))/2 - \
144 sizeof (umem_buftag_t), UMEM_BUFCTL_AUDIT_ALIGN))
146#define UMEM_MAX_STACK_DEPTH \
147 ((UMEM_BUFCTL_AUDIT_MAX_SIZE - \
148 UMEM_BUFCTL_AUDIT_SIZE_DEPTH(0)) / sizeof (uintptr_t))
163#define UMEM_LOCAL_BUFCTL_AUDIT(bcpp) \
164 *(bcpp) = (umem_bufctl_audit_t *) \
165 alloca(UMEM_BUFCTL_AUDIT_SIZE)
167#define UMEM_BUFCTL_AUDIT_SIZE \
168 UMEM_BUFCTL_AUDIT_SIZE_DEPTH(UMEM_STACK_DEPTH)
180#define UMEM_BUFTAG(cp, buf) \
181 ((umem_buftag_t *)((char *)(buf) + (cp)->cache_buftag))
183#define UMEM_BUFCTL(cp, buf) \
184 ((umem_bufctl_t *)((char *)(buf) + (cp)->cache_bufctl))
186#define UMEM_BUF(cp, bcp) \
187 ((void *)((char *)(bcp) - (cp)->cache_bufctl))
189#define UMEM_SLAB(cp, buf) \
190 ((umem_slab_t *)P2END((uintptr_t)(buf), (cp)->cache_slabsize) - 1)
192#define UMEM_CPU_CACHE(cp, cpu) \
193 (umem_cpu_cache_t *)((char *)cp + cpu->cpu_cache_offset)
195#define UMEM_MAGAZINE_VALID(cp, mp) \
196 (((umem_slab_t *)P2END((uintptr_t)(mp), PAGESIZE) - 1)->slab_cache == \
197 (cp)->cache_magtype->mt_cache)
199#define UMEM_SLAB_MEMBER(sp, buf) \
200 ((size_t)(buf) - (size_t)(sp)->slab_base < \
201 (sp)->slab_cache->cache_slabsize)
203#define UMEM_BUFTAG_ALLOC 0xa110c8edUL
204#define UMEM_BUFTAG_FREE 0xf4eef4eeUL
216#define UMEM_HASH_INITIAL 64
218#define UMEM_HASH(cp, buf) \
219 ((cp)->cache_hash_table + \
220 (((uintptr_t)(buf) >> (cp)->cache_hash_shift) & (cp)->cache_hash_mask))
238#if (defined(__PTHREAD_MUTEX_SIZE__) && __PTHREAD_MUTEX_SIZE__ >= 24) || defined(UMEM_PTHREAD_MUTEX_TOO_BIG)
239#define UMEM_CPU_CACHE_SIZE 128
241#define UMEM_CPU_CACHE_SIZE 64
243#define UMEM_CPU_PAD (UMEM_CPU_CACHE_SIZE - sizeof (mutex_t) - \
244 2 * sizeof (uint_t) - 2 * sizeof (void *) - 4 * sizeof (int))
245#define UMEM_CACHE_SIZE(ncpus) \
246 ((size_t)(&((umem_cache_t *)0)->cache_cpu[ncpus]))
258#if (!defined(_LP64) || defined(UMEM_PTHREAD_MUTEX_TOO_BIG)) && !defined(_WIN32)
277#define UMEM_CACHE_NAMELEN 31
356 sizeof (
mutex_t) -
sizeof (
char *) -
357 sizeof (size_t) - 2 *
sizeof (
int)];
377#define UMEM_MAXBUF 16384
380#define UMEM_ALIGN_SHIFT 3
381#define UMEM_VOID_FRACTION 8
387#define UMEM_SECOND_ALIGN 16
389#define UMEM_SECOND_ALIGN UMEM_ALIGN
392#define MALLOC_MAGIC 0x3a10c000
393#define MEMALIGN_MAGIC 0x3e3a1000
396#define MALLOC_SECOND_MAGIC 0x16ba7000
397#define MALLOC_OVERSIZE_MAGIC 0x06e47000
400#define UMEM_MALLOC_ENCODE(type, sz) (uint32_t)((type) - (sz))
401#define UMEM_MALLOC_DECODE(stat, sz) (uint32_t)((stat) + (sz))
402#define UMEM_FREE_PATTERN_32 (uint32_t)(UMEM_FREE_PATTERN)
404#define UMU_MAGAZINE_RESIZE 0x00000001
405#define UMU_HASH_RESCALE 0x00000002
406#define UMU_REAP 0x00000004
407#define UMU_NOTIFY 0x08000000
408#define UMU_ACTIVE 0x80000000
410#define UMEM_READY_INIT_FAILED -1
411#define UMEM_READY_STARTUP 1
412#define UMEM_READY_INITING 2
415#ifdef UMEM_STANDALONE
416extern void umem_startup(caddr_t,
size_t,
size_t, caddr_t, caddr_t);
417extern int umem_add(caddr_t,
size_t);
uint32_t uint_t
Definition sol_compat.h:48
u_int64_t hrtime_t
Definition sol_compat.h:47
pthread_mutex_t mutex_t
Definition sol_compat.h:45
pthread_t thread_t
Definition sol_compat.h:44
Definition umem_impl.h:150
struct umem_slab * bc_slab
Definition umem_impl.h:153
void * bc_contents
Definition umem_impl.h:158
hrtime_t bc_timestamp
Definition umem_impl.h:155
struct umem_bufctl * bc_next
Definition umem_impl.h:151
thread_t bc_thread
Definition umem_impl.h:156
int bc_depth
Definition umem_impl.h:159
struct umem_bufctl * bc_lastlog
Definition umem_impl.h:157
umem_cache_t * bc_cache
Definition umem_impl.h:154
void * bc_addr
Definition umem_impl.h:152
uintptr_t bc_stack[1]
Definition umem_impl.h:160
Definition umem_impl.h:116
void * bc_addr
Definition umem_impl.h:118
struct umem_bufctl * bc_next
Definition umem_impl.h:117
struct umem_slab * bc_slab
Definition umem_impl.h:119
Definition umem_impl.h:174
umem_bufctl_t * bt_bufctl
Definition umem_impl.h:176
intptr_t bt_bxstat
Definition umem_impl.h:177
uint64_t bt_redzone
Definition umem_impl.h:175
Definition umem_impl.h:279
uint64_t cache_slab_free
Definition umem_impl.h:286
size_t cache_contents
Definition umem_impl.h:325
int cache_uflags
Definition umem_impl.h:308
char cache_name[UMEM_CACHE_NAMELEN+1]
Definition umem_impl.h:298
uint64_t cache_slab_create
Definition umem_impl.h:283
size_t cache_hash_shift
Definition umem_impl.h:329
size_t cache_slabsize
Definition umem_impl.h:321
uint64_t cache_slab_alloc
Definition umem_impl.h:285
uint32_t cache_mtbf
Definition umem_impl.h:309
umem_cache_t * cache_prev
Definition umem_impl.h:311
size_t cache_maxcolor
Definition umem_impl.h:328
umem_cache_t * cache_unext
Definition umem_impl.h:312
size_t cache_verify
Definition umem_impl.h:324
int cache_flags
Definition umem_impl.h:307
uint64_t cache_slab_destroy
Definition umem_impl.h:284
umem_cache_t * cache_uprev
Definition umem_impl.h:313
uint64_t cache_buftotal
Definition umem_impl.h:288
uint64_t cache_alloc_fail
Definition umem_impl.h:287
uint64_t cache_depot_contention
Definition umem_impl.h:292
size_t cache_hash_mask
Definition umem_impl.h:330
umem_slab_t * cache_freelist
Definition umem_impl.h:331
void * cache_private
Definition umem_impl.h:304
mutex_t cache_depot_lock
Definition umem_impl.h:338
umem_bufctl_t ** cache_hash_table
Definition umem_impl.h:334
uint64_t cache_depot_contention_prev
Definition umem_impl.h:293
umem_slab_t cache_nullslab
Definition umem_impl.h:332
uint64_t cache_lookup_depth
Definition umem_impl.h:291
size_t cache_align
Definition umem_impl.h:300
umem_constructor_t * cache_constructor
Definition umem_impl.h:301
size_t cache_mincolor
Definition umem_impl.h:327
int cache_cflags
Definition umem_impl.h:306
size_t cache_chunksize
Definition umem_impl.h:320
size_t cache_color
Definition umem_impl.h:326
uint32_t cache_cpu_mask
Definition umem_impl.h:314
size_t cache_bufsize
Definition umem_impl.h:299
umem_magtype_t * cache_magtype
Definition umem_impl.h:339
vmem_t * cache_arena
Definition umem_impl.h:305
umem_maglist_t cache_empty
Definition umem_impl.h:341
size_t cache_bufctl
Definition umem_impl.h:322
umem_destructor_t * cache_destructor
Definition umem_impl.h:302
umem_cache_t * cache_next
Definition umem_impl.h:310
umem_cpu_cache_t cache_cpu[1]
Definition umem_impl.h:346
uint64_t cache_rescale
Definition umem_impl.h:290
size_t cache_buftag
Definition umem_impl.h:323
uint64_t cache_bufmax
Definition umem_impl.h:289
mutex_t cache_lock
Definition umem_impl.h:319
umem_cache_t * cache_bufctl_cache
Definition umem_impl.h:333
umem_maglist_t cache_full
Definition umem_impl.h:340
umem_reclaim_t * cache_reclaim
Definition umem_impl.h:303
Definition umem_impl.h:248
int cc_magsize
Definition umem_impl.h:256
umem_magazine_t * cc_loaded
Definition umem_impl.h:252
umem_magazine_t * cc_ploaded
Definition umem_impl.h:253
int cc_rounds
Definition umem_impl.h:254
uint_t cc_alloc
Definition umem_impl.h:250
uint_t cc_free
Definition umem_impl.h:251
mutex_t cc_lock
Definition umem_impl.h:249
char cc_pad[UMEM_CPU_PAD]
Definition umem_impl.h:262
int cc_flags
Definition umem_impl.h:257
int cc_prounds
Definition umem_impl.h:255
Definition umem_impl.h:372
uint32_t cpu_number
Definition umem_impl.h:374
uint32_t cpu_cache_offset
Definition umem_impl.h:373
Definition umem_impl.h:222
void * mag_next
Definition umem_impl.h:223
void * mag_round[1]
Definition umem_impl.h:224
Definition umem_impl.h:269
long ml_min
Definition umem_impl.h:272
uint64_t ml_alloc
Definition umem_impl.h:274
long ml_total
Definition umem_impl.h:271
umem_magazine_t * ml_list
Definition umem_impl.h:270
long ml_reaplimit
Definition umem_impl.h:273
Definition umem_impl.h:230
umem_cache_t * mt_cache
Definition umem_impl.h:235
int mt_magsize
Definition umem_impl.h:231
int mt_align
Definition umem_impl.h:232
size_t mt_maxbuf
Definition umem_impl.h:234
size_t mt_minbuf
Definition umem_impl.h:233
Definition umem_impl.h:206
void * slab_base
Definition umem_impl.h:208
struct umem_slab * slab_prev
Definition umem_impl.h:210
struct umem_bufctl * slab_head
Definition umem_impl.h:211
long slab_chunks
Definition umem_impl.h:213
long slab_refcnt
Definition umem_impl.h:212
struct umem_slab * slab_next
Definition umem_impl.h:209
struct umem_cache * slab_cache
Definition umem_impl.h:207
Definition vmem_impl_user.h:122
void umem_startup(caddr_t start, size_t len, size_t pagesize, caddr_t minstack, caddr_t maxstack)
Definition umem.c:2906
void umem_destructor_t(void *, void *)
Definition umem.h:65
void umem_reclaim_t(void *)
Definition umem.h:66
int umem_constructor_t(void *, void *, int)
Definition umem.h:64
#define UMEM_CACHE_NAMELEN
Definition umem_impl.h:277
struct umem_log_header umem_log_header_t
struct umem_cpu_cache umem_cpu_cache_t
#define UMEM_CPU_PAD
Definition umem_impl.h:243
struct umem_magazine umem_magazine_t
struct umem_cpu_log_header umem_cpu_log_header_t
struct umem_buftag umem_buftag_t
struct umem_magtype umem_magtype_t
struct umem_cpu umem_cpu_t
struct umem_bufctl umem_bufctl_t
struct umem_bufctl_audit umem_bufctl_audit_t
#define UMEM_CPU_CACHE_SIZE
Definition umem_impl.h:239
struct umem_slab umem_slab_t
struct umem_maglist umem_maglist_t