1#include "jemalloc/internal/jemalloc_preamble.h"
2#include "jemalloc/internal/jemalloc_internal_includes.h"
3
4#include "jemalloc/internal/hpa_hooks.h"
5
6static void *hpa_hooks_map(size_t size);
7static void hpa_hooks_unmap(void *ptr, size_t size);
8static void hpa_hooks_purge(void *ptr, size_t size);
9static void hpa_hooks_hugify(void *ptr, size_t size);
10static void hpa_hooks_dehugify(void *ptr, size_t size);
11static void hpa_hooks_curtime(nstime_t *r_nstime, bool first_reading);
12static uint64_t hpa_hooks_ms_since(nstime_t *past_nstime);
13
14hpa_hooks_t hpa_hooks_default = {
15 &hpa_hooks_map,
16 &hpa_hooks_unmap,
17 &hpa_hooks_purge,
18 &hpa_hooks_hugify,
19 &hpa_hooks_dehugify,
20 &hpa_hooks_curtime,
21 &hpa_hooks_ms_since
22};
23
24static void *
25hpa_hooks_map(size_t size) {
26 bool commit = true;
27 return pages_map(NULL, size, HUGEPAGE, &commit);
28}
29
30static void
31hpa_hooks_unmap(void *ptr, size_t size) {
32 pages_unmap(ptr, size);
33}
34
35static void
36hpa_hooks_purge(void *ptr, size_t size) {
37 pages_purge_forced(ptr, size);
38}
39
40static void
41hpa_hooks_hugify(void *ptr, size_t size) {
42 bool err = pages_huge(ptr, size);
43 (void)err;
44}
45
46static void
47hpa_hooks_dehugify(void *ptr, size_t size) {
48 bool err = pages_nohuge(ptr, size);
49 (void)err;
50}
51
52static void
53hpa_hooks_curtime(nstime_t *r_nstime, bool first_reading) {
54 if (first_reading) {
55 nstime_init_zero(r_nstime);
56 }
57 nstime_update(r_nstime);
58}
59
60static uint64_t
61hpa_hooks_ms_since(nstime_t *past_nstime) {
62 return nstime_ns_since(past_nstime) / 1000 / 1000;
63}
64