1 #ifndef JEMALLOC_INTERNAL_EXTENT_EXTERNS_H 2 #define JEMALLOC_INTERNAL_EXTENT_EXTERNS_H 3 4 #include "jemalloc/internal/mutex.h" 5 #include "jemalloc/internal/mutex_pool.h" 6 #include "jemalloc/internal/ph.h" 7 #include "jemalloc/internal/rtree.h" 8 9 extern size_t opt_lg_extent_max_active_fit; 10 11 extern rtree_t extents_rtree; 12 extern const extent_hooks_t extent_hooks_default; 13 extern mutex_pool_t extent_mutex_pool; 14 15 extent_t *extent_alloc(tsdn_t *tsdn, arena_t *arena); 16 void extent_dalloc(tsdn_t *tsdn, arena_t *arena, extent_t *extent); 17 18 extent_hooks_t *extent_hooks_get(arena_t *arena); 19 extent_hooks_t *extent_hooks_set(tsd_t *tsd, arena_t *arena, 20 extent_hooks_t *extent_hooks); 21 22 #ifdef JEMALLOC_JET 23 size_t extent_size_quantize_floor(size_t size); 24 size_t extent_size_quantize_ceil(size_t size); 25 #endif 26 27 ph_proto(, extent_avail_, extent_tree_t, extent_t) 28 ph_proto(, extent_heap_, extent_heap_t, extent_t) 29 30 bool extents_init(tsdn_t *tsdn, extents_t *extents, extent_state_t state, 31 bool delay_coalesce); 32 extent_state_t extents_state_get(const extents_t *extents); 33 size_t extents_npages_get(extents_t *extents); 34 /* Get the number of extents in the given page size index. */ 35 size_t extents_nextents_get(extents_t *extents, pszind_t ind); 36 /* Get the sum total bytes of the extents in the given page size index. */ 37 size_t extents_nbytes_get(extents_t *extents, pszind_t ind); 38 extent_t *extents_alloc(tsdn_t *tsdn, arena_t *arena, 39 extent_hooks_t **r_extent_hooks, extents_t *extents, void *new_addr, 40 size_t size, size_t pad, size_t alignment, bool slab, szind_t szind, 41 bool *zero, bool *commit); 42 void extents_dalloc(tsdn_t *tsdn, arena_t *arena, 43 extent_hooks_t **r_extent_hooks, extents_t *extents, extent_t *extent); 44 extent_t *extents_evict(tsdn_t *tsdn, arena_t *arena, 45 extent_hooks_t **r_extent_hooks, extents_t *extents, size_t npages_min); 46 void extents_prefork(tsdn_t *tsdn, extents_t *extents); 47 void extents_postfork_parent(tsdn_t *tsdn, extents_t *extents); 48 void extents_postfork_child(tsdn_t *tsdn, extents_t *extents); 49 extent_t *extent_alloc_wrapper(tsdn_t *tsdn, arena_t *arena, 50 extent_hooks_t **r_extent_hooks, void *new_addr, size_t size, size_t pad, 51 size_t alignment, bool slab, szind_t szind, bool *zero, bool *commit); 52 void extent_dalloc_gap(tsdn_t *tsdn, arena_t *arena, extent_t *extent); 53 void extent_dalloc_wrapper(tsdn_t *tsdn, arena_t *arena, 54 extent_hooks_t **r_extent_hooks, extent_t *extent); 55 void extent_destroy_wrapper(tsdn_t *tsdn, arena_t *arena, 56 extent_hooks_t **r_extent_hooks, extent_t *extent); 57 bool extent_commit_wrapper(tsdn_t *tsdn, arena_t *arena, 58 extent_hooks_t **r_extent_hooks, extent_t *extent, size_t offset, 59 size_t length); 60 bool extent_decommit_wrapper(tsdn_t *tsdn, arena_t *arena, 61 extent_hooks_t **r_extent_hooks, extent_t *extent, size_t offset, 62 size_t length); 63 bool extent_purge_lazy_wrapper(tsdn_t *tsdn, arena_t *arena, 64 extent_hooks_t **r_extent_hooks, extent_t *extent, size_t offset, 65 size_t length); 66 bool extent_purge_forced_wrapper(tsdn_t *tsdn, arena_t *arena, 67 extent_hooks_t **r_extent_hooks, extent_t *extent, size_t offset, 68 size_t length); 69 extent_t *extent_split_wrapper(tsdn_t *tsdn, arena_t *arena, 70 extent_hooks_t **r_extent_hooks, extent_t *extent, size_t size_a, 71 szind_t szind_a, bool slab_a, size_t size_b, szind_t szind_b, bool slab_b); 72 bool extent_merge_wrapper(tsdn_t *tsdn, arena_t *arena, 73 extent_hooks_t **r_extent_hooks, extent_t *a, extent_t *b); 74 75 bool extent_boot(void); 76 77 void extent_util_stats_get(tsdn_t *tsdn, const void *ptr, 78 size_t *nfree, size_t *nregs, size_t *size); 79 void extent_util_stats_verbose_get(tsdn_t *tsdn, const void *ptr, 80 size_t *nfree, size_t *nregs, size_t *size, 81 size_t *bin_nfree, size_t *bin_nregs, void **slabcur_addr); 82 83 #endif /* JEMALLOC_INTERNAL_EXTENT_EXTERNS_H */ 84