1*8e33eff8Schristos #ifndef JEMALLOC_INTERNAL_ARENA_INLINES_A_H 2*8e33eff8Schristos #define JEMALLOC_INTERNAL_ARENA_INLINES_A_H 3*8e33eff8Schristos 4*8e33eff8Schristos static inline unsigned 5*8e33eff8Schristos arena_ind_get(const arena_t *arena) { 6*8e33eff8Schristos return base_ind_get(arena->base); 7*8e33eff8Schristos } 8*8e33eff8Schristos 9*8e33eff8Schristos static inline void 10*8e33eff8Schristos arena_internal_add(arena_t *arena, size_t size) { 11*8e33eff8Schristos atomic_fetch_add_zu(&arena->stats.internal, size, ATOMIC_RELAXED); 12*8e33eff8Schristos } 13*8e33eff8Schristos 14*8e33eff8Schristos static inline void 15*8e33eff8Schristos arena_internal_sub(arena_t *arena, size_t size) { 16*8e33eff8Schristos atomic_fetch_sub_zu(&arena->stats.internal, size, ATOMIC_RELAXED); 17*8e33eff8Schristos } 18*8e33eff8Schristos 19*8e33eff8Schristos static inline size_t 20*8e33eff8Schristos arena_internal_get(arena_t *arena) { 21*8e33eff8Schristos return atomic_load_zu(&arena->stats.internal, ATOMIC_RELAXED); 22*8e33eff8Schristos } 23*8e33eff8Schristos 24*8e33eff8Schristos static inline bool 25*8e33eff8Schristos arena_prof_accum(tsdn_t *tsdn, arena_t *arena, uint64_t accumbytes) { 26*8e33eff8Schristos cassert(config_prof); 27*8e33eff8Schristos 28*8e33eff8Schristos if (likely(prof_interval == 0 || !prof_active_get_unlocked())) { 29*8e33eff8Schristos return false; 30*8e33eff8Schristos } 31*8e33eff8Schristos 32*8e33eff8Schristos return prof_accum_add(tsdn, &arena->prof_accum, accumbytes); 33*8e33eff8Schristos } 34*8e33eff8Schristos 35*8e33eff8Schristos #ifdef JEMALLOC_PERCPU_ARENA 36*8e33eff8Schristos static 37*8e33eff8Schristos inline void 38*8e33eff8Schristos percpu_arena_update(tsd_t *tsd, unsigned cpu) { 39*8e33eff8Schristos arena_t *oldarena = tsd_arena_get(tsd); 40*8e33eff8Schristos assert(oldarena != NULL); 41*8e33eff8Schristos unsigned oldind = arena_ind_get(oldarena); 42*8e33eff8Schristos 43*8e33eff8Schristos if (oldind != cpu) { 44*8e33eff8Schristos unsigned newind = cpu; 45*8e33eff8Schristos arena_t *newarena = arena_get(tsd_tsdn(tsd), newind, true); 46*8e33eff8Schristos assert(newarena != NULL); 47*8e33eff8Schristos 48*8e33eff8Schristos /* Set new arena/tcache associations. */ 49*8e33eff8Schristos arena_migrate(tsd, oldind, newind); 50*8e33eff8Schristos tcache_t *tcache = tcache_get(tsd); 51*8e33eff8Schristos if (tcache != NULL) { 52*8e33eff8Schristos tcache_arena_reassociate(tsd_tsdn(tsd), tcache, 53*8e33eff8Schristos newarena); 54*8e33eff8Schristos } 55*8e33eff8Schristos } 56*8e33eff8Schristos } 57*8e33eff8Schristos #else 58*8e33eff8Schristos static JEMALLOC_NORETURN inline void 59*8e33eff8Schristos percpu_arena_update(tsd_t *tsd, unsigned cpu) { 60*8e33eff8Schristos abort(); 61*8e33eff8Schristos } 62*8e33eff8Schristos #endif 63*8e33eff8Schristos 64*8e33eff8Schristos #endif /* JEMALLOC_INTERNAL_ARENA_INLINES_A_H */ 65