1*0ef50b4eSJason Evans #include "jemalloc/internal/jemalloc_preamble.h" 2*0ef50b4eSJason Evans #include "jemalloc/internal/jemalloc_internal_includes.h" 3*0ef50b4eSJason Evans 4*0ef50b4eSJason Evans #include "jemalloc/internal/bin.h" 5*0ef50b4eSJason Evans #include "jemalloc/internal/witness.h" 6*0ef50b4eSJason Evans 7*0ef50b4eSJason Evans const bin_info_t bin_infos[NBINS] = { 8*0ef50b4eSJason Evans #define BIN_INFO_bin_yes(reg_size, slab_size, nregs) \ 9*0ef50b4eSJason Evans {reg_size, slab_size, nregs, BITMAP_INFO_INITIALIZER(nregs)}, 10*0ef50b4eSJason Evans #define BIN_INFO_bin_no(reg_size, slab_size, nregs) 11*0ef50b4eSJason Evans #define SC(index, lg_grp, lg_delta, ndelta, psz, bin, pgs, \ 12*0ef50b4eSJason Evans lg_delta_lookup) \ 13*0ef50b4eSJason Evans BIN_INFO_bin_##bin((1U<<lg_grp) + (ndelta<<lg_delta), \ 14*0ef50b4eSJason Evans (pgs << LG_PAGE), (pgs << LG_PAGE) / ((1U<<lg_grp) + \ 15*0ef50b4eSJason Evans (ndelta<<lg_delta))) 16*0ef50b4eSJason Evans SIZE_CLASSES 17*0ef50b4eSJason Evans #undef BIN_INFO_bin_yes 18*0ef50b4eSJason Evans #undef BIN_INFO_bin_no 19*0ef50b4eSJason Evans #undef SC 20*0ef50b4eSJason Evans }; 21*0ef50b4eSJason Evans 22*0ef50b4eSJason Evans bool 23*0ef50b4eSJason Evans bin_init(bin_t *bin) { 24*0ef50b4eSJason Evans if (malloc_mutex_init(&bin->lock, "bin", WITNESS_RANK_BIN, 25*0ef50b4eSJason Evans malloc_mutex_rank_exclusive)) { 26*0ef50b4eSJason Evans return true; 27*0ef50b4eSJason Evans } 28*0ef50b4eSJason Evans bin->slabcur = NULL; 29*0ef50b4eSJason Evans extent_heap_new(&bin->slabs_nonfull); 30*0ef50b4eSJason Evans extent_list_init(&bin->slabs_full); 31*0ef50b4eSJason Evans if (config_stats) { 32*0ef50b4eSJason Evans memset(&bin->stats, 0, sizeof(bin_stats_t)); 33*0ef50b4eSJason Evans } 34*0ef50b4eSJason Evans return false; 35*0ef50b4eSJason Evans } 36*0ef50b4eSJason Evans 37*0ef50b4eSJason Evans void 38*0ef50b4eSJason Evans bin_prefork(tsdn_t *tsdn, bin_t *bin) { 39*0ef50b4eSJason Evans malloc_mutex_prefork(tsdn, &bin->lock); 40*0ef50b4eSJason Evans } 41*0ef50b4eSJason Evans 42*0ef50b4eSJason Evans void 43*0ef50b4eSJason Evans bin_postfork_parent(tsdn_t *tsdn, bin_t *bin) { 44*0ef50b4eSJason Evans malloc_mutex_postfork_parent(tsdn, &bin->lock); 45*0ef50b4eSJason Evans } 46*0ef50b4eSJason Evans 47*0ef50b4eSJason Evans void 48*0ef50b4eSJason Evans bin_postfork_child(tsdn_t *tsdn, bin_t *bin) { 49*0ef50b4eSJason Evans malloc_mutex_postfork_child(tsdn, &bin->lock); 50*0ef50b4eSJason Evans } 51