xref: /netbsd-src/external/bsd/jemalloc.old/include/jemalloc/internal/arena_inlines_a.h (revision 8e33eff89e26cf71871ead62f0d5063e1313c33a)
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