summaryrefslogtreecommitdiff
path: root/examples/redis-unstable/deps/jemalloc/src/ehooks.c
diff options
context:
space:
mode:
Diffstat (limited to 'examples/redis-unstable/deps/jemalloc/src/ehooks.c')
-rw-r--r--examples/redis-unstable/deps/jemalloc/src/ehooks.c275
1 files changed, 0 insertions, 275 deletions
diff --git a/examples/redis-unstable/deps/jemalloc/src/ehooks.c b/examples/redis-unstable/deps/jemalloc/src/ehooks.c
deleted file mode 100644
index 383e9de..0000000
--- a/examples/redis-unstable/deps/jemalloc/src/ehooks.c
+++ /dev/null
@@ -1,275 +0,0 @@
-#include "jemalloc/internal/jemalloc_preamble.h"
-#include "jemalloc/internal/jemalloc_internal_includes.h"
-
-#include "jemalloc/internal/ehooks.h"
-#include "jemalloc/internal/extent_mmap.h"
-
-void
-ehooks_init(ehooks_t *ehooks, extent_hooks_t *extent_hooks, unsigned ind) {
- /* All other hooks are optional; this one is not. */
- assert(extent_hooks->alloc != NULL);
- ehooks->ind = ind;
- ehooks_set_extent_hooks_ptr(ehooks, extent_hooks);
-}
-
-/*
- * If the caller specifies (!*zero), it is still possible to receive zeroed
- * memory, in which case *zero is toggled to true. arena_extent_alloc() takes
- * advantage of this to avoid demanding zeroed extents, but taking advantage of
- * them if they are returned.
- */
-static void *
-extent_alloc_core(tsdn_t *tsdn, arena_t *arena, void *new_addr, size_t size,
- size_t alignment, bool *zero, bool *commit, dss_prec_t dss_prec) {
- void *ret;
-
- assert(size != 0);
- assert(alignment != 0);
-
- /* "primary" dss. */
- if (have_dss && dss_prec == dss_prec_primary && (ret =
- extent_alloc_dss(tsdn, arena, new_addr, size, alignment, zero,
- commit)) != NULL) {
- return ret;
- }
- /* mmap. */
- if ((ret = extent_alloc_mmap(new_addr, size, alignment, zero, commit))
- != NULL) {
- return ret;
- }
- /* "secondary" dss. */
- if (have_dss && dss_prec == dss_prec_secondary && (ret =
- extent_alloc_dss(tsdn, arena, new_addr, size, alignment, zero,
- commit)) != NULL) {
- return ret;
- }
-
- /* All strategies for allocation failed. */
- return NULL;
-}
-
-void *
-ehooks_default_alloc_impl(tsdn_t *tsdn, void *new_addr, size_t size,
- size_t alignment, bool *zero, bool *commit, unsigned arena_ind) {
- arena_t *arena = arena_get(tsdn, arena_ind, false);
- /* NULL arena indicates arena_create. */
- assert(arena != NULL || alignment == HUGEPAGE);
- dss_prec_t dss = (arena == NULL) ? dss_prec_disabled :
- (dss_prec_t)atomic_load_u(&arena->dss_prec, ATOMIC_RELAXED);
- void *ret = extent_alloc_core(tsdn, arena, new_addr, size, alignment,
- zero, commit, dss);
- if (have_madvise_huge && ret) {
- pages_set_thp_state(ret, size);
- }
- return ret;
-}
-
-static void *
-ehooks_default_alloc(extent_hooks_t *extent_hooks, void *new_addr, size_t size,
- size_t alignment, bool *zero, bool *commit, unsigned arena_ind) {
- return ehooks_default_alloc_impl(tsdn_fetch(), new_addr, size,
- ALIGNMENT_CEILING(alignment, PAGE), zero, commit, arena_ind);
-}
-
-bool
-ehooks_default_dalloc_impl(void *addr, size_t size) {
- if (!have_dss || !extent_in_dss(addr)) {
- return extent_dalloc_mmap(addr, size);
- }
- return true;
-}
-
-static bool
-ehooks_default_dalloc(extent_hooks_t *extent_hooks, void *addr, size_t size,
- bool committed, unsigned arena_ind) {
- return ehooks_default_dalloc_impl(addr, size);
-}
-
-void
-ehooks_default_destroy_impl(void *addr, size_t size) {
- if (!have_dss || !extent_in_dss(addr)) {
- pages_unmap(addr, size);
- }
-}
-
-static void
-ehooks_default_destroy(extent_hooks_t *extent_hooks, void *addr, size_t size,
- bool committed, unsigned arena_ind) {
- ehooks_default_destroy_impl(addr, size);
-}
-
-bool
-ehooks_default_commit_impl(void *addr, size_t offset, size_t length) {
- return pages_commit((void *)((uintptr_t)addr + (uintptr_t)offset),
- length);
-}
-
-static bool
-ehooks_default_commit(extent_hooks_t *extent_hooks, void *addr, size_t size,
- size_t offset, size_t length, unsigned arena_ind) {
- return ehooks_default_commit_impl(addr, offset, length);
-}
-
-bool
-ehooks_default_decommit_impl(void *addr, size_t offset, size_t length) {
- return pages_decommit((void *)((uintptr_t)addr + (uintptr_t)offset),
- length);
-}
-
-static bool
-ehooks_default_decommit(extent_hooks_t *extent_hooks, void *addr, size_t size,
- size_t offset, size_t length, unsigned arena_ind) {
- return ehooks_default_decommit_impl(addr, offset, length);
-}
-
-#ifdef PAGES_CAN_PURGE_LAZY
-bool
-ehooks_default_purge_lazy_impl(void *addr, size_t offset, size_t length) {
- return pages_purge_lazy((void *)((uintptr_t)addr + (uintptr_t)offset),
- length);
-}
-
-static bool
-ehooks_default_purge_lazy(extent_hooks_t *extent_hooks, void *addr, size_t size,
- size_t offset, size_t length, unsigned arena_ind) {
- assert(addr != NULL);
- assert((offset & PAGE_MASK) == 0);
- assert(length != 0);
- assert((length & PAGE_MASK) == 0);
- return ehooks_default_purge_lazy_impl(addr, offset, length);
-}
-#endif
-
-#ifdef PAGES_CAN_PURGE_FORCED
-bool
-ehooks_default_purge_forced_impl(void *addr, size_t offset, size_t length) {
- return pages_purge_forced((void *)((uintptr_t)addr +
- (uintptr_t)offset), length);
-}
-
-static bool
-ehooks_default_purge_forced(extent_hooks_t *extent_hooks, void *addr,
- size_t size, size_t offset, size_t length, unsigned arena_ind) {
- assert(addr != NULL);
- assert((offset & PAGE_MASK) == 0);
- assert(length != 0);
- assert((length & PAGE_MASK) == 0);
- return ehooks_default_purge_forced_impl(addr, offset, length);
-}
-#endif
-
-bool
-ehooks_default_split_impl() {
- if (!maps_coalesce) {
- /*
- * Without retain, only whole regions can be purged (required by
- * MEM_RELEASE on Windows) -- therefore disallow splitting. See
- * comments in extent_head_no_merge().
- */
- return !opt_retain;
- }
-
- return false;
-}
-
-static bool
-ehooks_default_split(extent_hooks_t *extent_hooks, void *addr, size_t size,
- size_t size_a, size_t size_b, bool committed, unsigned arena_ind) {
- return ehooks_default_split_impl();
-}
-
-bool
-ehooks_default_merge_impl(tsdn_t *tsdn, void *addr_a, void *addr_b) {
- assert(addr_a < addr_b);
- /*
- * For non-DSS cases --
- * a) W/o maps_coalesce, merge is not always allowed (Windows):
- * 1) w/o retain, never merge (first branch below).
- * 2) with retain, only merge extents from the same VirtualAlloc
- * region (in which case MEM_DECOMMIT is utilized for purging).
- *
- * b) With maps_coalesce, it's always possible to merge.
- * 1) w/o retain, always allow merge (only about dirty / muzzy).
- * 2) with retain, to preserve the SN / first-fit, merge is still
- * disallowed if b is a head extent, i.e. no merging across
- * different mmap regions.
- *
- * a2) and b2) are implemented in emap_try_acquire_edata_neighbor, and
- * sanity checked in the second branch below.
- */
- if (!maps_coalesce && !opt_retain) {
- return true;
- }
- if (config_debug) {
- edata_t *a = emap_edata_lookup(tsdn, &arena_emap_global,
- addr_a);
- bool head_a = edata_is_head_get(a);
- edata_t *b = emap_edata_lookup(tsdn, &arena_emap_global,
- addr_b);
- bool head_b = edata_is_head_get(b);
- emap_assert_mapped(tsdn, &arena_emap_global, a);
- emap_assert_mapped(tsdn, &arena_emap_global, b);
- assert(extent_neighbor_head_state_mergeable(head_a, head_b,
- /* forward */ true));
- }
- if (have_dss && !extent_dss_mergeable(addr_a, addr_b)) {
- return true;
- }
-
- return false;
-}
-
-bool
-ehooks_default_merge(extent_hooks_t *extent_hooks, void *addr_a, size_t size_a,
- void *addr_b, size_t size_b, bool committed, unsigned arena_ind) {
- tsdn_t *tsdn = tsdn_fetch();
-
- return ehooks_default_merge_impl(tsdn, addr_a, addr_b);
-}
-
-void
-ehooks_default_zero_impl(void *addr, size_t size) {
- /*
- * By default, we try to zero out memory using OS-provided demand-zeroed
- * pages. If the user has specifically requested hugepages, though, we
- * don't want to purge in the middle of a hugepage (which would break it
- * up), so we act conservatively and use memset.
- */
- bool needs_memset = true;
- if (opt_thp != thp_mode_always) {
- needs_memset = pages_purge_forced(addr, size);
- }
- if (needs_memset) {
- memset(addr, 0, size);
- }
-}
-
-void
-ehooks_default_guard_impl(void *guard1, void *guard2) {
- pages_mark_guards(guard1, guard2);
-}
-
-void
-ehooks_default_unguard_impl(void *guard1, void *guard2) {
- pages_unmark_guards(guard1, guard2);
-}
-
-const extent_hooks_t ehooks_default_extent_hooks = {
- ehooks_default_alloc,
- ehooks_default_dalloc,
- ehooks_default_destroy,
- ehooks_default_commit,
- ehooks_default_decommit,
-#ifdef PAGES_CAN_PURGE_LAZY
- ehooks_default_purge_lazy,
-#else
- NULL,
-#endif
-#ifdef PAGES_CAN_PURGE_FORCED
- ehooks_default_purge_forced,
-#else
- NULL,
-#endif
- ehooks_default_split,
- ehooks_default_merge
-};