aboutsummaryrefslogtreecommitdiffstats
path: root/erts/emulator/beam/erl_sched_spec_pre_alloc.h
diff options
context:
space:
mode:
authorSverker Eriksson <[email protected]>2017-06-28 20:00:09 +0200
committerLukas Larsson <[email protected]>2017-10-02 10:34:27 +0200
commitaf8380c319c01cfbf6262c3356462823b9e88c1c (patch)
treeb3755905e8df09ee96fb75fb3b4bbef39d2aa708 /erts/emulator/beam/erl_sched_spec_pre_alloc.h
parentae02bac9a23bd2d9d8502e0a35f1db5cd6394da8 (diff)
downloadotp-af8380c319c01cfbf6262c3356462823b9e88c1c.tar.gz
otp-af8380c319c01cfbf6262c3356462823b9e88c1c.tar.bz2
otp-af8380c319c01cfbf6262c3356462823b9e88c1c.zip
erts: Add ERTS_THR_PREF_QUICK_ALLOC_IMPL
usable from any (managed?) thread.
Diffstat (limited to 'erts/emulator/beam/erl_sched_spec_pre_alloc.h')
-rw-r--r--erts/emulator/beam/erl_sched_spec_pre_alloc.h13
1 files changed, 10 insertions, 3 deletions
diff --git a/erts/emulator/beam/erl_sched_spec_pre_alloc.h b/erts/emulator/beam/erl_sched_spec_pre_alloc.h
index 1307e65962..d232db0e69 100644
--- a/erts/emulator/beam/erl_sched_spec_pre_alloc.h
+++ b/erts/emulator/beam/erl_sched_spec_pre_alloc.h
@@ -59,6 +59,11 @@ typedef struct {
char *start;
char *end;
int chunks_mem_size;
+ int nthreads;
+
+ /* Used only by thread variant: */
+ erts_tsd_key_t tsd_key;
+ erts_atomic_t id_generator;
} erts_sspa_data_t;
typedef union erts_sspa_blk_t_ erts_sspa_blk_t;
@@ -140,7 +145,9 @@ check_local_list(erts_sspa_chunk_header_t *chdr)
#endif
erts_sspa_data_t *erts_sspa_create(size_t blk_sz,
- int pa_size);
+ int pa_size,
+ int nthreads,
+ const char* name);
void erts_sspa_remote_free(erts_sspa_chunk_header_t *chdr,
erts_sspa_blk_t *blk,
int cinit);
@@ -158,7 +165,7 @@ ERTS_GLB_INLINE int erts_sspa_free(erts_sspa_data_t *data, int cix, char *blk);
ERTS_GLB_INLINE erts_sspa_chunk_t *
erts_sspa_cix2chunk(erts_sspa_data_t *data, int cix)
{
- ASSERT(0 <= cix && cix < erts_no_schedulers);
+ ASSERT(0 <= cix && cix < data->nthreads);
return (erts_sspa_chunk_t *) (data->start + cix*data->chunks_mem_size);
}
@@ -171,7 +178,7 @@ erts_sspa_ptr2cix(erts_sspa_data_t *data, void *ptr)
return -1;
diff = ((char *) ptr) - data->start;
cix = (int) diff / data->chunks_mem_size;
- ASSERT(0 <= cix && cix < erts_no_schedulers);
+ ASSERT(0 <= cix && cix < data->nthreads);
return cix;
}