Break prof and tcache knowledge of b0.
This commit is contained in:
parent
a0c1f4ac57
commit
29436fa056
@ -93,7 +93,7 @@ bool prof_gdump_get(tsdn_t *tsdn);
|
||||
bool prof_gdump_set(tsdn_t *tsdn, bool active);
|
||||
void prof_boot0(void);
|
||||
void prof_boot1(void);
|
||||
bool prof_boot2(tsd_t *tsd);
|
||||
bool prof_boot2(tsd_t *tsd, base_t *base);
|
||||
void prof_prefork0(tsdn_t *tsdn);
|
||||
void prof_prefork1(tsdn_t *tsdn);
|
||||
void prof_postfork_parent(tsdn_t *tsdn);
|
||||
|
@ -36,10 +36,10 @@ void tcache_arena_reassociate(tsdn_t *tsdn, tcache_t *tcache,
|
||||
tcache_t *tcache_create_explicit(tsd_t *tsd);
|
||||
void tcache_cleanup(tsd_t *tsd);
|
||||
void tcache_stats_merge(tsdn_t *tsdn, tcache_t *tcache, arena_t *arena);
|
||||
bool tcaches_create(tsd_t *tsd, unsigned *r_ind);
|
||||
bool tcaches_create(tsd_t *tsd, base_t *base, unsigned *r_ind);
|
||||
void tcaches_flush(tsd_t *tsd, unsigned ind);
|
||||
void tcaches_destroy(tsd_t *tsd, unsigned ind);
|
||||
bool tcache_boot(tsdn_t *tsdn);
|
||||
bool tcache_boot(tsdn_t *tsdn, base_t *base);
|
||||
void tcache_arena_associate(tsdn_t *tsdn, tcache_t *tcache, arena_t *arena);
|
||||
void tcache_prefork(tsdn_t *tsdn);
|
||||
void tcache_postfork_parent(tsdn_t *tsdn);
|
||||
|
@ -2040,7 +2040,7 @@ tcache_create_ctl(tsd_t *tsd, const size_t *mib, size_t miblen,
|
||||
unsigned tcache_ind;
|
||||
|
||||
READONLY();
|
||||
if (tcaches_create(tsd, &tcache_ind)) {
|
||||
if (tcaches_create(tsd, b0get(), &tcache_ind)) {
|
||||
ret = EFAULT;
|
||||
goto label_return;
|
||||
}
|
||||
|
@ -1586,7 +1586,7 @@ malloc_init_hard_a0_locked() {
|
||||
prof_boot1();
|
||||
}
|
||||
arena_boot(&sc_data);
|
||||
if (tcache_boot(TSDN_NULL)) {
|
||||
if (tcache_boot(TSDN_NULL, b0get())) {
|
||||
return true;
|
||||
}
|
||||
if (malloc_mutex_init(&arenas_lock, "arenas", WITNESS_RANK_ARENAS,
|
||||
@ -1823,7 +1823,7 @@ malloc_init_hard(void) {
|
||||
if (malloc_init_narenas() || background_thread_boot1(tsd_tsdn(tsd))) {
|
||||
UNLOCK_RETURN(tsd_tsdn(tsd), true, true)
|
||||
}
|
||||
if (config_prof && prof_boot2(tsd)) {
|
||||
if (config_prof && prof_boot2(tsd, b0get())) {
|
||||
UNLOCK_RETURN(tsd_tsdn(tsd), true, true)
|
||||
}
|
||||
|
||||
|
21
src/prof.c
21
src/prof.c
@ -91,6 +91,9 @@ static uint64_t prof_dump_iseq;
|
||||
static uint64_t prof_dump_mseq;
|
||||
static uint64_t prof_dump_useq;
|
||||
|
||||
/* The fallback allocator profiling functionality will use. */
|
||||
base_t *prof_base;
|
||||
|
||||
malloc_mutex_t prof_dump_mtx;
|
||||
static char *prof_dump_prefix = NULL;
|
||||
|
||||
@ -584,8 +587,8 @@ prof_dump_prefix_set(tsdn_t *tsdn, const char *prefix) {
|
||||
if (prof_dump_prefix == NULL) {
|
||||
malloc_mutex_unlock(tsdn, &prof_dump_filename_mtx);
|
||||
/* Everything is still guarded by ctl_mtx. */
|
||||
char *buffer = base_alloc(tsdn, b0get(), PROF_DUMP_FILENAME_LEN,
|
||||
QUANTUM);
|
||||
char *buffer = base_alloc(tsdn, prof_base,
|
||||
PROF_DUMP_FILENAME_LEN, QUANTUM);
|
||||
if (buffer == NULL) {
|
||||
return true;
|
||||
}
|
||||
@ -944,7 +947,7 @@ prof_boot1(void) {
|
||||
}
|
||||
|
||||
bool
|
||||
prof_boot2(tsd_t *tsd) {
|
||||
prof_boot2(tsd_t *tsd, base_t *base) {
|
||||
cassert(config_prof);
|
||||
|
||||
if (opt_prof) {
|
||||
@ -1017,9 +1020,10 @@ prof_boot2(tsd_t *tsd) {
|
||||
return true;
|
||||
}
|
||||
|
||||
gctx_locks = (malloc_mutex_t *)base_alloc(tsd_tsdn(tsd),
|
||||
b0get(), PROF_NCTX_LOCKS * sizeof(malloc_mutex_t),
|
||||
CACHELINE);
|
||||
prof_base = base;
|
||||
|
||||
gctx_locks = (malloc_mutex_t *)base_alloc(tsd_tsdn(tsd), base,
|
||||
PROF_NCTX_LOCKS * sizeof(malloc_mutex_t), CACHELINE);
|
||||
if (gctx_locks == NULL) {
|
||||
return true;
|
||||
}
|
||||
@ -1031,9 +1035,8 @@ prof_boot2(tsd_t *tsd) {
|
||||
}
|
||||
}
|
||||
|
||||
tdata_locks = (malloc_mutex_t *)base_alloc(tsd_tsdn(tsd),
|
||||
b0get(), PROF_NTDATA_LOCKS * sizeof(malloc_mutex_t),
|
||||
CACHELINE);
|
||||
tdata_locks = (malloc_mutex_t *)base_alloc(tsd_tsdn(tsd), base,
|
||||
PROF_NTDATA_LOCKS * sizeof(malloc_mutex_t), CACHELINE);
|
||||
if (tdata_locks == NULL) {
|
||||
return true;
|
||||
}
|
||||
|
16
src/tcache.c
16
src/tcache.c
@ -664,14 +664,14 @@ tcache_stats_merge(tsdn_t *tsdn, tcache_t *tcache, arena_t *arena) {
|
||||
}
|
||||
|
||||
static bool
|
||||
tcaches_create_prep(tsd_t *tsd) {
|
||||
tcaches_create_prep(tsd_t *tsd, base_t *base) {
|
||||
bool err;
|
||||
|
||||
malloc_mutex_lock(tsd_tsdn(tsd), &tcaches_mtx);
|
||||
|
||||
if (tcaches == NULL) {
|
||||
tcaches = base_alloc(tsd_tsdn(tsd), b0get(), sizeof(tcache_t *)
|
||||
* (MALLOCX_TCACHE_MAX+1), CACHELINE);
|
||||
tcaches = base_alloc(tsd_tsdn(tsd), base,
|
||||
sizeof(tcache_t *) * (MALLOCX_TCACHE_MAX+1), CACHELINE);
|
||||
if (tcaches == NULL) {
|
||||
err = true;
|
||||
goto label_return;
|
||||
@ -690,12 +690,12 @@ label_return:
|
||||
}
|
||||
|
||||
bool
|
||||
tcaches_create(tsd_t *tsd, unsigned *r_ind) {
|
||||
tcaches_create(tsd_t *tsd, base_t *base, unsigned *r_ind) {
|
||||
witness_assert_depth(tsdn_witness_tsdp_get(tsd_tsdn(tsd)), 0);
|
||||
|
||||
bool err;
|
||||
|
||||
if (tcaches_create_prep(tsd)) {
|
||||
if (tcaches_create_prep(tsd, base)) {
|
||||
err = true;
|
||||
goto label_return;
|
||||
}
|
||||
@ -772,7 +772,7 @@ tcaches_destroy(tsd_t *tsd, unsigned ind) {
|
||||
}
|
||||
|
||||
bool
|
||||
tcache_boot(tsdn_t *tsdn) {
|
||||
tcache_boot(tsdn_t *tsdn, base_t *base) {
|
||||
/* If necessary, clamp opt_lg_tcache_max. */
|
||||
if (opt_lg_tcache_max < 0 || (ZU(1) << opt_lg_tcache_max) <
|
||||
SC_SMALL_MAXCLASS) {
|
||||
@ -789,8 +789,8 @@ tcache_boot(tsdn_t *tsdn) {
|
||||
nhbins = sz_size2index(tcache_maxclass) + 1;
|
||||
|
||||
/* Initialize tcache_bin_info. */
|
||||
tcache_bin_info = (cache_bin_info_t *)base_alloc(tsdn, b0get(), nhbins
|
||||
* sizeof(cache_bin_info_t), CACHELINE);
|
||||
tcache_bin_info = (cache_bin_info_t *)base_alloc(tsdn, base,
|
||||
nhbins * sizeof(cache_bin_info_t), CACHELINE);
|
||||
if (tcache_bin_info == NULL) {
|
||||
return true;
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user