xref: /src/contrib/jemalloc/include/jemalloc/internal/ecache.h (revision c43cad87172039ccf38172129c79755ea79e6102)
1 #ifndef JEMALLOC_INTERNAL_ECACHE_H
2 #define JEMALLOC_INTERNAL_ECACHE_H
3 
4 #include "jemalloc/internal/eset.h"
5 #include "jemalloc/internal/san.h"
6 #include "jemalloc/internal/mutex.h"
7 
8 typedef struct ecache_s ecache_t;
9 struct ecache_s {
10 	malloc_mutex_t mtx;
11 	eset_t eset;
12 	eset_t guarded_eset;
13 	/* All stored extents must be in the same state. */
14 	extent_state_t state;
15 	/* The index of the ehooks the ecache is associated with. */
16 	unsigned ind;
17 	/*
18 	 * If true, delay coalescing until eviction; otherwise coalesce during
19 	 * deallocation.
20 	 */
21 	bool delay_coalesce;
22 };
23 
24 static inline size_t
ecache_npages_get(ecache_t * ecache)25 ecache_npages_get(ecache_t *ecache) {
26 	return eset_npages_get(&ecache->eset) +
27 	    eset_npages_get(&ecache->guarded_eset);
28 }
29 
30 /* Get the number of extents in the given page size index. */
31 static inline size_t
ecache_nextents_get(ecache_t * ecache,pszind_t ind)32 ecache_nextents_get(ecache_t *ecache, pszind_t ind) {
33 	return eset_nextents_get(&ecache->eset, ind) +
34 	    eset_nextents_get(&ecache->guarded_eset, ind);
35 }
36 
37 /* Get the sum total bytes of the extents in the given page size index. */
38 static inline size_t
ecache_nbytes_get(ecache_t * ecache,pszind_t ind)39 ecache_nbytes_get(ecache_t *ecache, pszind_t ind) {
40 	return eset_nbytes_get(&ecache->eset, ind) +
41 	    eset_nbytes_get(&ecache->guarded_eset, ind);
42 }
43 
44 static inline unsigned
ecache_ind_get(ecache_t * ecache)45 ecache_ind_get(ecache_t *ecache) {
46 	return ecache->ind;
47 }
48 
49 bool ecache_init(tsdn_t *tsdn, ecache_t *ecache, extent_state_t state,
50     unsigned ind, bool delay_coalesce);
51 void ecache_prefork(tsdn_t *tsdn, ecache_t *ecache);
52 void ecache_postfork_parent(tsdn_t *tsdn, ecache_t *ecache);
53 void ecache_postfork_child(tsdn_t *tsdn, ecache_t *ecache);
54 
55 #endif /* JEMALLOC_INTERNAL_ECACHE_H */
56