1/******************************************************************************/
2#ifdef JEMALLOC_H_TYPES
3
4typedef struct ctl_node_s ctl_node_t;
5typedef struct ctl_named_node_s ctl_named_node_t;
6typedef struct ctl_indexed_node_s ctl_indexed_node_t;
7typedef struct ctl_arena_stats_s ctl_arena_stats_t;
8typedef struct ctl_stats_s ctl_stats_t;
9
10#endif /* JEMALLOC_H_TYPES */
11/******************************************************************************/
12#ifdef JEMALLOC_H_STRUCTS
13
14struct ctl_node_s {
15	bool			named;
16};
17
18struct ctl_named_node_s {
19	struct ctl_node_s	node;
20	const char		*name;
21	/* If (nchildren == 0), this is a terminal node. */
22	unsigned		nchildren;
23	const			ctl_node_t *children;
24	int			(*ctl)(const size_t *, size_t, void *, size_t *,
25	    void *, size_t);
26};
27
28struct ctl_indexed_node_s {
29	struct ctl_node_s	node;
30	const ctl_named_node_t	*(*index)(const size_t *, size_t, size_t);
31};
32
33struct ctl_arena_stats_s {
34	bool			initialized;
35	unsigned		nthreads;
36	const char		*dss;
37	size_t			pactive;
38	size_t			pdirty;
39	arena_stats_t		astats;
40
41	/* Aggregate stats for small size classes, based on bin stats. */
42	size_t			allocated_small;
43	uint64_t		nmalloc_small;
44	uint64_t		ndalloc_small;
45	uint64_t		nrequests_small;
46
47	malloc_bin_stats_t	bstats[NBINS];
48	malloc_large_stats_t	*lstats;	/* nlclasses elements. */
49};
50
51struct ctl_stats_s {
52	size_t			allocated;
53	size_t			active;
54	size_t			mapped;
55	struct {
56		size_t		current;	/* stats_chunks.curchunks */
57		uint64_t	total;		/* stats_chunks.nchunks */
58		size_t		high;		/* stats_chunks.highchunks */
59	} chunks;
60	struct {
61		size_t		allocated;	/* huge_allocated */
62		uint64_t	nmalloc;	/* huge_nmalloc */
63		uint64_t	ndalloc;	/* huge_ndalloc */
64	} huge;
65	unsigned		narenas;
66	ctl_arena_stats_t	*arenas;	/* (narenas + 1) elements. */
67};
68
69#endif /* JEMALLOC_H_STRUCTS */
70/******************************************************************************/
71#ifdef JEMALLOC_H_EXTERNS
72
73int	ctl_byname(const char *name, void *oldp, size_t *oldlenp, void *newp,
74    size_t newlen);
75int	ctl_nametomib(const char *name, size_t *mibp, size_t *miblenp);
76
77int	ctl_bymib(const size_t *mib, size_t miblen, void *oldp, size_t *oldlenp,
78    void *newp, size_t newlen);
79bool	ctl_boot(void);
80void	ctl_prefork(void);
81void	ctl_postfork_parent(void);
82void	ctl_postfork_child(void);
83
84#define	xmallctl(name, oldp, oldlenp, newp, newlen) do {		\
85	if (je_mallctl(name, oldp, oldlenp, newp, newlen)		\
86	    != 0) {							\
87		malloc_printf(						\
88		    "<jemalloc>: Failure in xmallctl(\"%s\", ...)\n",	\
89		    name);						\
90		abort();						\
91	}								\
92} while (0)
93
94#define	xmallctlnametomib(name, mibp, miblenp) do {			\
95	if (je_mallctlnametomib(name, mibp, miblenp) != 0) {		\
96		malloc_printf("<jemalloc>: Failure in "			\
97		    "xmallctlnametomib(\"%s\", ...)\n", name);		\
98		abort();						\
99	}								\
100} while (0)
101
102#define	xmallctlbymib(mib, miblen, oldp, oldlenp, newp, newlen) do {	\
103	if (je_mallctlbymib(mib, miblen, oldp, oldlenp, newp,		\
104	    newlen) != 0) {						\
105		malloc_write(						\
106		    "<jemalloc>: Failure in xmallctlbymib()\n");	\
107		abort();						\
108	}								\
109} while (0)
110
111#endif /* JEMALLOC_H_EXTERNS */
112/******************************************************************************/
113#ifdef JEMALLOC_H_INLINES
114
115#endif /* JEMALLOC_H_INLINES */
116/******************************************************************************/
117
118