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