xref: /freebsd/contrib/jemalloc/src/extent_mmap.c (revision b7eaed250fccfdef218a62bc2d0af529ad75341c)
1*b7eaed25SJason Evans #define JEMALLOC_EXTENT_MMAP_C_
2*b7eaed25SJason Evans #include "jemalloc/internal/jemalloc_preamble.h"
3*b7eaed25SJason Evans #include "jemalloc/internal/jemalloc_internal_includes.h"
4*b7eaed25SJason Evans 
5*b7eaed25SJason Evans #include "jemalloc/internal/assert.h"
6*b7eaed25SJason Evans #include "jemalloc/internal/extent_mmap.h"
7*b7eaed25SJason Evans 
8*b7eaed25SJason Evans /******************************************************************************/
9*b7eaed25SJason Evans /* Data. */
10*b7eaed25SJason Evans 
11*b7eaed25SJason Evans bool	opt_retain =
12*b7eaed25SJason Evans #ifdef JEMALLOC_RETAIN
13*b7eaed25SJason Evans     true
14*b7eaed25SJason Evans #else
15*b7eaed25SJason Evans     false
16*b7eaed25SJason Evans #endif
17*b7eaed25SJason Evans     ;
18*b7eaed25SJason Evans 
19*b7eaed25SJason Evans /******************************************************************************/
20*b7eaed25SJason Evans 
21*b7eaed25SJason Evans void *
22*b7eaed25SJason Evans extent_alloc_mmap(void *new_addr, size_t size, size_t alignment, bool *zero,
23*b7eaed25SJason Evans     bool *commit) {
24*b7eaed25SJason Evans 	void *ret = pages_map(new_addr, size, ALIGNMENT_CEILING(alignment,
25*b7eaed25SJason Evans 	    PAGE), commit);
26*b7eaed25SJason Evans 	if (ret == NULL) {
27*b7eaed25SJason Evans 		return NULL;
28*b7eaed25SJason Evans 	}
29*b7eaed25SJason Evans 	assert(ret != NULL);
30*b7eaed25SJason Evans 	if (*commit) {
31*b7eaed25SJason Evans 		*zero = true;
32*b7eaed25SJason Evans 	}
33*b7eaed25SJason Evans 	return ret;
34*b7eaed25SJason Evans }
35*b7eaed25SJason Evans 
36*b7eaed25SJason Evans bool
37*b7eaed25SJason Evans extent_dalloc_mmap(void *addr, size_t size) {
38*b7eaed25SJason Evans 	if (!opt_retain) {
39*b7eaed25SJason Evans 		pages_unmap(addr, size);
40*b7eaed25SJason Evans 	}
41*b7eaed25SJason Evans 	return opt_retain;
42*b7eaed25SJason Evans }
43