xref: /freebsd/include/malloc_np.h (revision b3e76948)
16b2c15daSJason Evans /*-
24d846d26SWarner Losh  * SPDX-License-Identifier: BSD-2-Clause
3e58eb3c4SPedro F. Giffuni  *
46b2c15daSJason Evans  * Copyright (C) 2006 Jason Evans <jasone@FreeBSD.org>.
56b2c15daSJason Evans  * All rights reserved.
66b2c15daSJason Evans  *
76b2c15daSJason Evans  * Redistribution and use in source and binary forms, with or without
86b2c15daSJason Evans  * modification, are permitted provided that the following conditions
96b2c15daSJason Evans  * are met:
106b2c15daSJason Evans  * 1. Redistributions of source code must retain the above copyright
116b2c15daSJason Evans  *    notice(s), this list of conditions and the following disclaimer as
126b2c15daSJason Evans  *    the first lines of this file unmodified other than the possible
136b2c15daSJason Evans  *    addition of one or more copyright notices.
146b2c15daSJason Evans  * 2. Redistributions in binary form must reproduce the above copyright
156b2c15daSJason Evans  *    notice(s), this list of conditions and the following disclaimer in
166b2c15daSJason Evans  *    the documentation and/or other materials provided with the
176b2c15daSJason Evans  *    distribution.
186b2c15daSJason Evans  *
196b2c15daSJason Evans  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDER(S) ``AS IS'' AND ANY
206b2c15daSJason Evans  * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
216b2c15daSJason Evans  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
226b2c15daSJason Evans  * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT HOLDER(S) BE
236b2c15daSJason Evans  * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
246b2c15daSJason Evans  * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
256b2c15daSJason Evans  * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
266b2c15daSJason Evans  * BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
276b2c15daSJason Evans  * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
286b2c15daSJason Evans  * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
296b2c15daSJason Evans  * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
306b2c15daSJason Evans  */
316b2c15daSJason Evans 
326b2c15daSJason Evans #ifndef _MALLOC_NP_H_
336b2c15daSJason Evans #define	_MALLOC_NP_H_
344f5f00d8SKonstantin Belousov 
3578a6842dSJason Evans #include <sys/types.h>
364f5f00d8SKonstantin Belousov 
374f5f00d8SKonstantin Belousov #ifdef __cplusplus
384f5f00d8SKonstantin Belousov #define	__MyBool	bool
394f5f00d8SKonstantin Belousov #else
404f5f00d8SKonstantin Belousov #define	__MyBool	_Bool
414f5f00d8SKonstantin Belousov #endif
426b2c15daSJason Evans 
4378a6842dSJason Evans __BEGIN_DECLS
44b7eaed25SJason Evans typedef struct extent_hooks_s extent_hooks_t;
454f5f00d8SKonstantin Belousov typedef void *(extent_alloc_t)(extent_hooks_t *, void *, size_t, size_t,
464f5f00d8SKonstantin Belousov     __MyBool *, __MyBool *, unsigned);
474f5f00d8SKonstantin Belousov typedef __MyBool (extent_dalloc_t)(extent_hooks_t *, void *, size_t, __MyBool,
48b7eaed25SJason Evans     unsigned);
494f5f00d8SKonstantin Belousov typedef void (extent_destroy_t)(extent_hooks_t *, void *, size_t, __MyBool,
50b7eaed25SJason Evans     unsigned);
514f5f00d8SKonstantin Belousov typedef __MyBool (extent_commit_t)(extent_hooks_t *, void *, size_t, size_t,
52b7eaed25SJason Evans     size_t, unsigned);
534f5f00d8SKonstantin Belousov typedef __MyBool (extent_decommit_t)(extent_hooks_t *, void *, size_t, size_t,
544f5f00d8SKonstantin Belousov     size_t, unsigned);
554f5f00d8SKonstantin Belousov typedef __MyBool (extent_purge_t)(extent_hooks_t *, void *, size_t, size_t, size_t,
56b7eaed25SJason Evans     unsigned);
574f5f00d8SKonstantin Belousov typedef __MyBool (extent_split_t)(extent_hooks_t *, void *, size_t, size_t, size_t,
584f5f00d8SKonstantin Belousov     __MyBool, unsigned);
594f5f00d8SKonstantin Belousov typedef __MyBool (extent_merge_t)(extent_hooks_t *, void *, size_t, void *, size_t,
604f5f00d8SKonstantin Belousov     __MyBool, unsigned);
61b7eaed25SJason Evans struct extent_hooks_s {
62b7eaed25SJason Evans 	extent_alloc_t		*alloc;
63b7eaed25SJason Evans 	extent_dalloc_t		*dalloc;
64b7eaed25SJason Evans 	extent_destroy_t	*destroy;
65b7eaed25SJason Evans 	extent_commit_t		*commit;
66b7eaed25SJason Evans 	extent_decommit_t	*decommit;
67b7eaed25SJason Evans 	extent_purge_t		*purge_lazy;
68b7eaed25SJason Evans 	extent_purge_t		*purge_forced;
69b7eaed25SJason Evans 	extent_split_t		*split;
70b7eaed25SJason Evans 	extent_merge_t		*merge;
71b7eaed25SJason Evans };
72d0e79aa3SJason Evans 
736b2c15daSJason Evans size_t	malloc_usable_size(const void *ptr);
74a4bd5210SJason Evans 
75a4bd5210SJason Evans void	malloc_stats_print(void (*write_cb)(void *, const char *),
76a4bd5210SJason Evans     void *cbopaque, const char *opts);
77b7eaed25SJason Evans 
78b7eaed25SJason Evans #define	MALLCTL_ARENAS_ALL	4096
79b7eaed25SJason Evans #define	MALLCTL_ARENAS_DESTROYED	4097
80b7eaed25SJason Evans 
81a4bd5210SJason Evans int	mallctl(const char *name, void *oldp, size_t *oldlenp, void *newp,
82a4bd5210SJason Evans     size_t newlen);
83a4bd5210SJason Evans int	mallctlnametomib(const char *name, size_t *mibp, size_t *miblenp);
84a4bd5210SJason Evans int	mallctlbymib(const size_t *mib, size_t miblen, void *oldp,
85a4bd5210SJason Evans     size_t *oldlenp, void *newp, size_t newlen);
86a4bd5210SJason Evans 
87b7eaed25SJason Evans #define	MALLOCX_LG_ALIGN(la)	((int)(la))
88b7eaed25SJason Evans #define	MALLOCX_ALIGN(a)	((int)(ffsl((int)(a))-1))
89f921d10fSJason Evans #define	MALLOCX_ZERO		((int)0x40)
90d0e79aa3SJason Evans #define	MALLOCX_TCACHE(tc)	((int)(((tc)+2) << 8))
91d0e79aa3SJason Evans #define	MALLOCX_TCACHE_NONE	MALLOCX_TCACHE(-1)
92b7eaed25SJason Evans #define	MALLOCX_ARENA(a)	((((int)(a))+1) << 20)
93f921d10fSJason Evans 
94f921d10fSJason Evans void	*mallocx(size_t size, int flags);
95f921d10fSJason Evans void	*rallocx(void *ptr, size_t size, int flags);
96f921d10fSJason Evans size_t	xallocx(void *ptr, size_t size, size_t extra, int flags);
97f921d10fSJason Evans size_t	sallocx(const void *ptr, int flags);
98f921d10fSJason Evans void	dallocx(void *ptr, int flags);
99d0e79aa3SJason Evans void	sdallocx(void *ptr, size_t size, int flags);
100f921d10fSJason Evans size_t	nallocx(size_t size, int flags);
101f921d10fSJason Evans 
102d0e79aa3SJason Evans void *	__calloc(size_t number, size_t size) __malloc_like;
103d0e79aa3SJason Evans void *	__malloc(size_t size) __malloc_like;
104d0e79aa3SJason Evans void *	__realloc(void *ptr, size_t size);
105d0e79aa3SJason Evans void	__free(void *ptr);
106d0e79aa3SJason Evans int	__posix_memalign(void **ptr, size_t alignment, size_t size);
107d0e79aa3SJason Evans void	*__aligned_alloc(size_t alignment, size_t size);
108d0e79aa3SJason Evans size_t	__malloc_usable_size(const void *ptr);
109df0d881dSJason Evans void	__malloc_stats_print(void (*write_cb)(void *, const char *),
110df0d881dSJason Evans     void *cbopaque, const char *opts);
111df0d881dSJason Evans int	__mallctl(const char *name, void *oldp, size_t *oldlenp, void *newp,
112df0d881dSJason Evans     size_t newlen);
113df0d881dSJason Evans int	__mallctlnametomib(const char *name, size_t *mibp, size_t *miblenp);
114df0d881dSJason Evans int	__mallctlbymib(const size_t *mib, size_t miblen, void *oldp,
115df0d881dSJason Evans     size_t *oldlenp, void *newp, size_t newlen);
116f921d10fSJason Evans void	*__mallocx(size_t size, int flags);
117f921d10fSJason Evans void	*__rallocx(void *ptr, size_t size, int flags);
118f921d10fSJason Evans size_t	__xallocx(void *ptr, size_t size, size_t extra, int flags);
119f921d10fSJason Evans size_t	__sallocx(const void *ptr, int flags);
120f921d10fSJason Evans void	__dallocx(void *ptr, int flags);
121d0e79aa3SJason Evans void	__sdallocx(void *ptr, size_t size, int flags);
122f921d10fSJason Evans size_t	__nallocx(size_t size, int flags);
123dcc6ef16SKonstantin Belousov 
124dcc6ef16SKonstantin Belousov void	*memalign(size_t, size_t) __malloc_like __alloc_align(1)
125dcc6ef16SKonstantin Belousov 	    __alloc_size(2);
12678a6842dSJason Evans __END_DECLS
1276b2c15daSJason Evans 
1284f5f00d8SKonstantin Belousov #undef __MyBool
1294f5f00d8SKonstantin Belousov 
1306b2c15daSJason Evans #endif /* _MALLOC_NP_H_ */
131