Lines Matching refs:arena

146 	rtl_arena_type * arena  in rtl_arena_segment_populate()  argument
159 QUEUE_INSERT_TAIL_NAMED(&(arena->m_segment_reserve_span_head), span, s); in rtl_arena_segment_populate()
166 head = &(arena->m_segment_reserve_head); in rtl_arena_segment_populate()
187 rtl_arena_type * arena, in rtl_arena_segment_get() argument
195 head = &(arena->m_segment_reserve_head); in rtl_arena_segment_get()
196 if ((head->m_snext != head) || rtl_arena_segment_populate (arena)) in rtl_arena_segment_get()
215 rtl_arena_type * arena, in rtl_arena_segment_put() argument
231 head = &(arena->m_segment_reserve_head); in rtl_arena_segment_put()
250 rtl_arena_type * arena, in rtl_arena_freelist_insert() argument
256 head = &(arena->m_freelist_head[highbit(segment->m_size) - 1]); in rtl_arena_freelist_insert()
259 arena->m_freelist_bitmap |= head->m_size; in rtl_arena_freelist_insert()
273 rtl_arena_type * arena, in rtl_arena_freelist_remove() argument
283 OSL_ASSERT(arena->m_freelist_bitmap & head->m_size); in rtl_arena_freelist_remove()
284 arena->m_freelist_bitmap ^= head->m_size; in rtl_arena_freelist_remove()
301 #define RTL_ARENA_HASH_INDEX(arena, addr) \ argument
302 …RTL_ARENA_HASH_INDEX_IMPL((addr), (arena)->m_hash_shift, (arena)->m_quantum_shift, ((arena)->m_has…
310 rtl_arena_type * arena, in rtl_arena_hash_rescale() argument
327 RTL_MEMORY_LOCK_ACQUIRE(&(arena->m_lock)); in rtl_arena_hash_rescale()
329 old_table = arena->m_hash_table; in rtl_arena_hash_rescale()
330 old_size = arena->m_hash_size; in rtl_arena_hash_rescale()
336 arena->m_name, in rtl_arena_hash_rescale()
337 arena->m_stats.m_alloc - arena->m_stats.m_free, in rtl_arena_hash_rescale()
338 (arena->m_stats.m_alloc - arena->m_stats.m_free) >> arena->m_hash_shift, in rtl_arena_hash_rescale()
339 arena->m_stats.m_free, in rtl_arena_hash_rescale()
344 for (i = 0; i < arena->m_hash_size; i++) in rtl_arena_hash_rescale()
346 sal_Size k = 0; rtl_arena_segment_type ** segpp = &(arena->m_hash_table[i]); in rtl_arena_hash_rescale()
357 arena->m_hash_table = new_table; in rtl_arena_hash_rescale()
358 arena->m_hash_size = new_size; in rtl_arena_hash_rescale()
359 arena->m_hash_shift = highbit(arena->m_hash_size) - 1; in rtl_arena_hash_rescale()
369 head = &(arena->m_hash_table[RTL_ARENA_HASH_INDEX(arena, curr->m_addr)]); in rtl_arena_hash_rescale()
378 RTL_MEMORY_LOCK_RELEASE(&(arena->m_lock)); in rtl_arena_hash_rescale()
380 if (old_table != arena->m_hash_table_0) in rtl_arena_hash_rescale()
394 rtl_arena_type * arena, in rtl_arena_hash_insert() argument
400 ppSegment = &(arena->m_hash_table[RTL_ARENA_HASH_INDEX(arena, segment->m_addr)]); in rtl_arena_hash_insert()
405 arena->m_stats.m_alloc += 1; in rtl_arena_hash_insert()
406 arena->m_stats.m_mem_alloc += segment->m_size; in rtl_arena_hash_insert()
419 rtl_arena_type * arena, in rtl_arena_hash_remove() argument
431 segpp = &(arena->m_hash_table[RTL_ARENA_HASH_INDEX(arena, addr)]); in rtl_arena_hash_remove()
450 arena->m_stats.m_free += 1; in rtl_arena_hash_remove()
451 arena->m_stats.m_mem_alloc -= segment->m_size; in rtl_arena_hash_remove()
455 sal_Size nseg = (sal_Size)(arena->m_stats.m_alloc - arena->m_stats.m_free); in rtl_arena_hash_remove()
456 if (nseg > 4 * arena->m_hash_size) in rtl_arena_hash_remove()
458 if (!(arena->m_flags & RTL_ARENA_FLAG_RESCALE)) in rtl_arena_hash_remove()
460 sal_Size ave = nseg >> arena->m_hash_shift; in rtl_arena_hash_remove()
461 sal_Size new_size = arena->m_hash_size << (highbit(ave) - 1); in rtl_arena_hash_remove()
463 arena->m_flags |= RTL_ARENA_FLAG_RESCALE; in rtl_arena_hash_remove()
464 RTL_MEMORY_LOCK_RELEASE(&(arena->m_lock)); in rtl_arena_hash_remove()
465 rtl_arena_hash_rescale (arena, new_size); in rtl_arena_hash_remove()
466 RTL_MEMORY_LOCK_ACQUIRE(&(arena->m_lock)); in rtl_arena_hash_remove()
467 arena->m_flags &= ~RTL_ARENA_FLAG_RESCALE; in rtl_arena_hash_remove()
486 rtl_arena_type * arena, in rtl_arena_segment_alloc() argument
502 head = &(arena->m_freelist_head[msb - 1]); in rtl_arena_segment_alloc()
519 index = lowbit(RTL_MEMORY_P2ALIGN(arena->m_freelist_bitmap, size)); in rtl_arena_segment_alloc()
525 head = &(arena->m_freelist_head[index - 1]); in rtl_arena_segment_alloc()
534 rtl_arena_freelist_remove (arena, (*ppSegment)); in rtl_arena_segment_alloc()
548 rtl_arena_type * arena, in rtl_arena_segment_create() argument
554 if (arena->m_source_alloc != 0) in rtl_arena_segment_create()
556 rtl_arena_segment_get (arena, ppSegment); in rtl_arena_segment_create()
560 rtl_arena_segment_get (arena, &span); in rtl_arena_segment_create()
564 RTL_MEMORY_LOCK_RELEASE(&(arena->m_lock)); in rtl_arena_segment_create()
567 span->m_addr = (sal_uIntPtr)(arena->m_source_alloc)( in rtl_arena_segment_create()
568 arena->m_source_arena, &(span->m_size)); in rtl_arena_segment_create()
570 RTL_MEMORY_LOCK_ACQUIRE(&(arena->m_lock)); in rtl_arena_segment_create()
575 QUEUE_INSERT_HEAD_NAMED(&(arena->m_segment_head), span, s); in rtl_arena_segment_create()
576 arena->m_stats.m_mem_total += span->m_size; in rtl_arena_segment_create()
586 rtl_arena_segment_put (arena, &span); in rtl_arena_segment_create()
588 rtl_arena_segment_put (arena, ppSegment); in rtl_arena_segment_create()
603 rtl_arena_type * arena, in rtl_arena_segment_coalesce() argument
621 rtl_arena_freelist_remove (arena, next); in rtl_arena_segment_coalesce()
627 rtl_arena_segment_put (arena, &next); in rtl_arena_segment_coalesce()
639 rtl_arena_freelist_remove (arena, prev); in rtl_arena_segment_coalesce()
645 rtl_arena_segment_put (arena, &prev); in rtl_arena_segment_coalesce()
656 rtl_arena_type * arena = (rtl_arena_type*)(obj); in rtl_arena_constructor() local
660 memset (arena, 0, sizeof(rtl_arena_type)); in rtl_arena_constructor()
662 QUEUE_START_NAMED(arena, arena_); in rtl_arena_constructor()
664 (void) RTL_MEMORY_LOCK_INIT(&(arena->m_lock)); in rtl_arena_constructor()
666 head = &(arena->m_segment_reserve_span_head); in rtl_arena_constructor()
670 head = &(arena->m_segment_reserve_head); in rtl_arena_constructor()
674 head = &(arena->m_segment_head); in rtl_arena_constructor()
680 head = &(arena->m_freelist_head[i]); in rtl_arena_constructor()
687 arena->m_hash_table = arena->m_hash_table_0; in rtl_arena_constructor()
688 arena->m_hash_size = RTL_ARENA_HASH_SIZE; in rtl_arena_constructor()
689 arena->m_hash_shift = highbit(arena->m_hash_size) - 1; in rtl_arena_constructor()
698 rtl_arena_type * arena = (rtl_arena_type*)(obj); in rtl_arena_destructor() local
702 OSL_ASSERT(QUEUE_STARTED_NAMED(arena, arena_)); in rtl_arena_destructor()
704 RTL_MEMORY_LOCK_DESTROY(&(arena->m_lock)); in rtl_arena_destructor()
706 head = &(arena->m_segment_reserve_span_head); in rtl_arena_destructor()
710 head = &(arena->m_segment_reserve_head); in rtl_arena_destructor()
714 head = &(arena->m_segment_head); in rtl_arena_destructor()
720 head = &(arena->m_freelist_head[i]); in rtl_arena_destructor()
728 OSL_ASSERT(arena->m_hash_table == arena->m_hash_table_0); in rtl_arena_destructor()
729 OSL_ASSERT(arena->m_hash_size == RTL_ARENA_HASH_SIZE); in rtl_arena_destructor()
731 arena->m_hash_shift == in rtl_arena_destructor()
732 SAL_INT_CAST(unsigned, highbit(arena->m_hash_size) - 1)); in rtl_arena_destructor()
741 rtl_arena_type * arena, in rtl_arena_activate() argument
750 OSL_ASSERT(arena != NULL); in rtl_arena_activate()
751 if (arena != NULL) in rtl_arena_activate()
753 (void) snprintf (arena->m_name, sizeof(arena->m_name), "%s", name); in rtl_arena_activate()
762 arena->m_quantum = quantum; in rtl_arena_activate()
763 arena->m_quantum_shift = highbit(arena->m_quantum) - 1; in rtl_arena_activate()
764 arena->m_qcache_max = quantum_cache_max; in rtl_arena_activate()
766 arena->m_source_arena = source_arena; in rtl_arena_activate()
767 arena->m_source_alloc = source_alloc; in rtl_arena_activate()
768 arena->m_source_free = source_free; in rtl_arena_activate()
770 if (arena->m_qcache_max > 0) in rtl_arena_activate()
773 int i, n = (arena->m_qcache_max >> arena->m_quantum_shift); in rtl_arena_activate()
776 arena->m_qcache_ptr = (rtl_cache_type**)rtl_arena_alloc (gp_arena_arena, &size); in rtl_arena_activate()
777 if (!(arena->m_qcache_ptr)) in rtl_arena_activate()
784 size = i * arena->m_quantum; in rtl_arena_activate()
785 (void) snprintf (name, sizeof(name), "%s_%lu", arena->m_name, size); in rtl_arena_activate()
786arena->m_qcache_ptr[i - 1] = rtl_cache_create(name, size, 0, NULL, NULL, NULL, NULL, arena, RTL_CA… in rtl_arena_activate()
792 QUEUE_INSERT_TAIL_NAMED(&(g_arena_list.m_arena_head), arena, arena_); in rtl_arena_activate()
795 return (arena); in rtl_arena_activate()
802 rtl_arena_type * arena in rtl_arena_deactivate() argument
809 QUEUE_REMOVE_NAMED(arena, arena_); in rtl_arena_deactivate()
813 if ((arena->m_qcache_max > 0) && (arena->m_qcache_ptr != 0)) in rtl_arena_deactivate()
815 int i, n = (arena->m_qcache_max >> arena->m_quantum_shift); in rtl_arena_deactivate()
818 if (arena->m_qcache_ptr[i - 1] != 0) in rtl_arena_deactivate()
820 rtl_cache_destroy (arena->m_qcache_ptr[i - 1]); in rtl_arena_deactivate()
821 arena->m_qcache_ptr[i - 1] = 0; in rtl_arena_deactivate()
826 arena->m_qcache_ptr, in rtl_arena_deactivate()
829 arena->m_qcache_ptr = 0; in rtl_arena_deactivate()
836 arena->m_name, in rtl_arena_deactivate()
837 arena->m_stats.m_alloc, arena->m_stats.m_free, in rtl_arena_deactivate()
838 arena->m_stats.m_mem_total, arena->m_stats.m_mem_alloc in rtl_arena_deactivate()
840 if (arena->m_stats.m_alloc > arena->m_stats.m_free) in rtl_arena_deactivate()
847 arena->m_name, in rtl_arena_deactivate()
848 arena->m_stats.m_alloc - arena->m_stats.m_free, in rtl_arena_deactivate()
849 arena->m_stats.m_mem_alloc in rtl_arena_deactivate()
853 for (i = 0, n = arena->m_hash_size; i < n; i++) in rtl_arena_deactivate()
855 while ((segment = arena->m_hash_table[i]) != NULL) in rtl_arena_deactivate()
858 arena->m_hash_table[i] = segment->m_fnext, segment->m_fnext = segment->m_fprev = segment; in rtl_arena_deactivate()
861 rtl_arena_segment_coalesce (arena, segment); in rtl_arena_deactivate()
864 rtl_arena_freelist_insert (arena, segment); in rtl_arena_deactivate()
870 if (arena->m_hash_table != arena->m_hash_table_0) in rtl_arena_deactivate()
874 arena->m_hash_table, in rtl_arena_deactivate()
875 arena->m_hash_size * sizeof(rtl_arena_segment_type*)); in rtl_arena_deactivate()
877 arena->m_hash_table = arena->m_hash_table_0; in rtl_arena_deactivate()
878 arena->m_hash_size = RTL_ARENA_HASH_SIZE; in rtl_arena_deactivate()
879 arena->m_hash_shift = highbit(arena->m_hash_size) - 1; in rtl_arena_deactivate()
883 head = &(arena->m_segment_head); in rtl_arena_deactivate()
889 rtl_arena_freelist_remove (arena, segment); in rtl_arena_deactivate()
901 rtl_arena_segment_put (arena, &segment); in rtl_arena_deactivate()
905 head = &(arena->m_segment_reserve_head); in rtl_arena_deactivate()
913 head = &(arena->m_segment_reserve_span_head); in rtl_arena_deactivate()
955 rtl_arena_type * arena = result; in rtl_arena_create() local
956 VALGRIND_CREATE_MEMPOOL(arena, 0, 0); in rtl_arena_create()
957 rtl_arena_constructor (arena); in rtl_arena_create()
966 arena, in rtl_arena_create()
977 rtl_arena_deactivate (arena); in rtl_arena_create()
978 rtl_arena_destructor (arena); in rtl_arena_create()
979 VALGRIND_DESTROY_MEMPOOL(arena); in rtl_arena_create()
980 rtl_arena_free (gp_arena_arena, arena, size); in rtl_arena_create()
998 rtl_arena_type * arena in rtl_arena_destroy() argument
1001 if (arena != NULL) in rtl_arena_destroy()
1003 rtl_arena_deactivate (arena); in rtl_arena_destroy()
1004 rtl_arena_destructor (arena); in rtl_arena_destroy()
1005 VALGRIND_DESTROY_MEMPOOL(arena); in rtl_arena_destroy()
1006 rtl_arena_free (gp_arena_arena, arena, sizeof(rtl_arena_type)); in rtl_arena_destroy()
1014 rtl_arena_type * arena, in rtl_arena_alloc() argument
1020 if ((arena != 0) && (pSize != 0)) in rtl_arena_alloc()
1022 sal_Size size = RTL_MEMORY_ALIGN((*pSize), arena->m_quantum); in rtl_arena_alloc()
1023 if (size > arena->m_qcache_max) in rtl_arena_alloc()
1028 RTL_MEMORY_LOCK_ACQUIRE(&(arena->m_lock)); in rtl_arena_alloc()
1029 if (rtl_arena_segment_alloc (arena, size, &segment) || in rtl_arena_alloc()
1030 rtl_arena_segment_create(arena, size, &segment) ) in rtl_arena_alloc()
1042 if (oversize >= SAL_MAX(arena->m_quantum, arena->m_qcache_max)) in rtl_arena_alloc()
1045 rtl_arena_segment_get (arena, &remainder); in rtl_arena_alloc()
1055 rtl_arena_freelist_insert (arena, remainder); in rtl_arena_alloc()
1059 rtl_arena_hash_insert (arena, segment); in rtl_arena_alloc()
1063 VALGRIND_MEMPOOL_ALLOC(arena, segment->m_addr, segment->m_size); in rtl_arena_alloc()
1068 RTL_MEMORY_LOCK_RELEASE(&(arena->m_lock)); in rtl_arena_alloc()
1073 int index = (size >> arena->m_quantum_shift) - 1; in rtl_arena_alloc()
1074 OSL_ASSERT (arena->m_qcache_ptr[index] != 0); in rtl_arena_alloc()
1076 addr = rtl_cache_alloc (arena->m_qcache_ptr[index]); in rtl_arena_alloc()
1088 rtl_arena_type * arena, in rtl_arena_free() argument
1093 if (arena != 0) in rtl_arena_free()
1095 size = RTL_MEMORY_ALIGN(size, arena->m_quantum); in rtl_arena_free()
1096 if (size > arena->m_qcache_max) in rtl_arena_free()
1101 RTL_MEMORY_LOCK_ACQUIRE(&(arena->m_lock)); in rtl_arena_free()
1103 segment = rtl_arena_hash_remove (arena, (sal_uIntPtr)(addr), size); in rtl_arena_free()
1109 VALGRIND_MEMPOOL_FREE(arena, segment->m_addr); in rtl_arena_free()
1114 rtl_arena_segment_coalesce (arena, segment); in rtl_arena_free()
1127 if (arena->m_source_free) in rtl_arena_free()
1136 rtl_arena_segment_put (arena, &segment); in rtl_arena_free()
1142 rtl_arena_segment_put (arena, &prev); in rtl_arena_free()
1145 arena->m_stats.m_mem_total -= size; in rtl_arena_free()
1146 RTL_MEMORY_LOCK_RELEASE(&(arena->m_lock)); in rtl_arena_free()
1148 (arena->m_source_free)(arena->m_source_arena, addr, size); in rtl_arena_free()
1154 rtl_arena_freelist_insert (arena, segment); in rtl_arena_free()
1157 RTL_MEMORY_LOCK_RELEASE(&(arena->m_lock)); in rtl_arena_free()
1162 int index = (size >> arena->m_quantum_shift) - 1; in rtl_arena_free()
1163 OSL_ASSERT (arena->m_qcache_ptr[index] != 0); in rtl_arena_free()
1165 rtl_cache_free (arena->m_qcache_ptr[index], addr); in rtl_arena_free()
1382 rtl_arena_type * arena, * head; in rtl_arena_fini() local
1387 for (arena = head->m_arena_next; arena != head; arena = arena->m_arena_next) in rtl_arena_fini()
1392 arena->m_name, in rtl_arena_fini()
1393 arena->m_stats.m_alloc, arena->m_stats.m_free, in rtl_arena_fini()
1394 arena->m_stats.m_mem_total, arena->m_stats.m_mem_alloc in rtl_arena_fini()