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