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 416 extern void umem_startup(caddr_t,
size_t,
size_t, caddr_t, caddr_t);
417 extern int umem_add(caddr_t,
size_t);
umem_slab_t * cache_freelist
Definition: umem_impl.h:331
struct umem_bufctl umem_bufctl_t
uint64_t cache_rescale
Definition: umem_impl.h:290
umem_magazine_t * cc_ploaded
Definition: umem_impl.h:253
#define UMEM_CPU_CACHE_SIZE
Definition: umem_impl.h:241
void * bc_addr
Definition: umem_impl.h:118
void * bc_contents
Definition: umem_impl.h:158
umem_maglist_t cache_full
Definition: umem_impl.h:340
uint64_t cache_depot_contention_prev
Definition: umem_impl.h:293
int cc_flags
Definition: umem_impl.h:257
struct umem_cpu_cache umem_cpu_cache_t
size_t cache_maxcolor
Definition: umem_impl.h:328
int cc_rounds
Definition: umem_impl.h:254
struct umem_buftag umem_buftag_t
Definition: umem_impl.h:116
long slab_chunks
Definition: umem_impl.h:213
umem_cache_t * bc_cache
Definition: umem_impl.h:154
void umem_destructor_t(void *, void *)
Definition: umem.h:65
umem_cache_t * cache_unext
Definition: umem_impl.h:312
void umem_reclaim_t(void *)
Definition: umem.h:66
uint64_t cache_depot_contention
Definition: umem_impl.h:292
int cc_magsize
Definition: umem_impl.h:256
long ml_min
Definition: umem_impl.h:272
struct umem_bufctl * bc_lastlog
Definition: umem_impl.h:157
uint64_t ml_alloc
Definition: umem_impl.h:274
int cache_uflags
Definition: umem_impl.h:308
vmem_t * cache_arena
Definition: umem_impl.h:305
size_t cache_bufctl
Definition: umem_impl.h:322
uint64_t cache_slab_create
Definition: umem_impl.h:283
#define UMEM_CACHE_NAMELEN
Definition: umem_impl.h:277
umem_cpu_cache_t cache_cpu[1]
Definition: umem_impl.h:346
umem_cache_t * cache_bufctl_cache
Definition: umem_impl.h:333
uint64_t cache_alloc_fail
Definition: umem_impl.h:287
size_t cache_slabsize
Definition: umem_impl.h:321
uint32_t cpu_cache_offset
Definition: umem_impl.h:373
size_t cache_chunksize
Definition: umem_impl.h:320
size_t cache_color
Definition: umem_impl.h:326
int bc_depth
Definition: umem_impl.h:159
struct umem_maglist umem_maglist_t
int cc_prounds
Definition: umem_impl.h:255
struct umem_bufctl * slab_head
Definition: umem_impl.h:211
umem_constructor_t * cache_constructor
Definition: umem_impl.h:301
Definition: umem_impl.h:279
size_t mt_maxbuf
Definition: umem_impl.h:234
pthread_mutex_t mutex_t
Definition: sol_compat.h:45
size_t cache_hash_shift
Definition: umem_impl.h:329
uintptr_t bc_stack[1]
Definition: umem_impl.h:160
Definition: umem_impl.h:150
long ml_total
Definition: umem_impl.h:271
Definition: vmem_impl_user.h:122
uint32_t cache_cpu_mask
Definition: umem_impl.h:314
thread_t bc_thread
Definition: umem_impl.h:156
#define UMEM_CPU_PAD
Definition: umem_impl.h:243
u_int64_t hrtime_t
Definition: sol_compat.h:47
struct umem_slab * slab_next
Definition: umem_impl.h:209
umem_destructor_t * cache_destructor
Definition: umem_impl.h:302
Definition: umem_impl.h:372
int mt_magsize
Definition: umem_impl.h:231
Definition: umem_impl.h:248
uint64_t cache_lookup_depth
Definition: umem_impl.h:291
uint64_t cache_buftotal
Definition: umem_impl.h:288
size_t mt_minbuf
Definition: umem_impl.h:233
uint32_t cache_mtbf
Definition: umem_impl.h:309
void * mag_round[1]
Definition: umem_impl.h:224
uint32_t cpu_number
Definition: umem_impl.h:374
char cache_name[UMEM_CACHE_NAMELEN+1]
Definition: umem_impl.h:298
struct umem_cpu umem_cpu_t
uint64_t cache_slab_destroy
Definition: umem_impl.h:284
uint64_t cache_slab_free
Definition: umem_impl.h:286
mutex_t cache_depot_lock
Definition: umem_impl.h:338
void * bc_addr
Definition: umem_impl.h:152
struct umem_slab * bc_slab
Definition: umem_impl.h:153
umem_magtype_t * cache_magtype
Definition: umem_impl.h:339
struct umem_slab * slab_prev
Definition: umem_impl.h:210
intptr_t bt_bxstat
Definition: umem_impl.h:177
int cache_flags
Definition: umem_impl.h:307
umem_bufctl_t * bt_bufctl
Definition: umem_impl.h:176
struct umem_magtype umem_magtype_t
Definition: umem_impl.h:230
struct umem_bufctl * bc_next
Definition: umem_impl.h:117
Definition: umem_impl.h:222
void umem_startup(caddr_t start, size_t len, size_t pagesize, caddr_t minstack, caddr_t maxstack)
Definition: umem.c:2906
uint64_t cache_bufmax
Definition: umem_impl.h:289
void * slab_base
Definition: umem_impl.h:208
umem_cache_t * cache_prev
Definition: umem_impl.h:311
umem_magazine_t * cc_loaded
Definition: umem_impl.h:252
void * mag_next
Definition: umem_impl.h:223
size_t cache_mincolor
Definition: umem_impl.h:327
struct umem_slab umem_slab_t
int umem_constructor_t(void *, void *, int)
Definition: umem.h:64
struct umem_bufctl_audit umem_bufctl_audit_t
pthread_t thread_t
Definition: sol_compat.h:44
umem_magazine_t * ml_list
Definition: umem_impl.h:270
long slab_refcnt
Definition: umem_impl.h:212
char cc_pad[UMEM_CPU_PAD]
Definition: umem_impl.h:262
Definition: umem_impl.h:269
size_t cache_hash_mask
Definition: umem_impl.h:330
int mt_align
Definition: umem_impl.h:232
uint64_t cache_slab_alloc
Definition: umem_impl.h:285
mutex_t cache_lock
Definition: umem_impl.h:319
struct umem_slab * bc_slab
Definition: umem_impl.h:119
umem_maglist_t cache_empty
Definition: umem_impl.h:341
hrtime_t bc_timestamp
Definition: umem_impl.h:155
struct umem_magazine umem_magazine_t
size_t cache_align
Definition: umem_impl.h:300
size_t cache_verify
Definition: umem_impl.h:324
uint_t cc_alloc
Definition: umem_impl.h:250
Definition: umem_impl.h:174
int cache_cflags
Definition: umem_impl.h:306
umem_slab_t cache_nullslab
Definition: umem_impl.h:332
long ml_reaplimit
Definition: umem_impl.h:273
struct umem_cpu_log_header umem_cpu_log_header_t
struct umem_cache * slab_cache
Definition: umem_impl.h:207
umem_cache_t * cache_uprev
Definition: umem_impl.h:313
mutex_t cc_lock
Definition: umem_impl.h:249
umem_reclaim_t * cache_reclaim
Definition: umem_impl.h:303
Definition: umem_impl.h:206
size_t cache_contents
Definition: umem_impl.h:325
uint_t cc_free
Definition: umem_impl.h:251
umem_cache_t * cache_next
Definition: umem_impl.h:310
umem_cache_t * mt_cache
Definition: umem_impl.h:235
umem_bufctl_t ** cache_hash_table
Definition: umem_impl.h:334
size_t cache_bufsize
Definition: umem_impl.h:299
size_t cache_buftag
Definition: umem_impl.h:323
uint64_t bt_redzone
Definition: umem_impl.h:175
struct umem_log_header umem_log_header_t
void * cache_private
Definition: umem_impl.h:304
struct umem_bufctl * bc_next
Definition: umem_impl.h:151
uint32_t uint_t
Definition: sol_compat.h:48