1234370Sjasone/******************************************************************************/
2234370Sjasone#ifdef JEMALLOC_H_TYPES
3234370Sjasone
4234370Sjasonetypedef struct ctl_node_s ctl_node_t;
5235238Sjasonetypedef struct ctl_named_node_s ctl_named_node_t;
6235238Sjasonetypedef struct ctl_indexed_node_s ctl_indexed_node_t;
7234370Sjasonetypedef struct ctl_arena_stats_s ctl_arena_stats_t;
8234370Sjasonetypedef struct ctl_stats_s ctl_stats_t;
9234370Sjasone
10234370Sjasone#endif /* JEMALLOC_H_TYPES */
11234370Sjasone/******************************************************************************/
12234370Sjasone#ifdef JEMALLOC_H_STRUCTS
13234370Sjasone
14234370Sjasonestruct ctl_node_s {
15234370Sjasone	bool			named;
16234370Sjasone};
17234370Sjasone
18235238Sjasonestruct ctl_named_node_s {
19235238Sjasone	struct ctl_node_s	node;
20235238Sjasone	const char		*name;
21235238Sjasone	/* If (nchildren == 0), this is a terminal node. */
22235238Sjasone	unsigned		nchildren;
23235238Sjasone	const			ctl_node_t *children;
24235238Sjasone	int			(*ctl)(const size_t *, size_t, void *, size_t *,
25235238Sjasone	    void *, size_t);
26235238Sjasone};
27235238Sjasone
28235238Sjasonestruct ctl_indexed_node_s {
29235238Sjasone	struct ctl_node_s	node;
30235238Sjasone	const ctl_named_node_t	*(*index)(const size_t *, size_t, size_t);
31235238Sjasone};
32235238Sjasone
33234370Sjasonestruct ctl_arena_stats_s {
34234370Sjasone	bool			initialized;
35234370Sjasone	unsigned		nthreads;
36242844Sjasone	const char		*dss;
37234370Sjasone	size_t			pactive;
38234370Sjasone	size_t			pdirty;
39234370Sjasone	arena_stats_t		astats;
40234370Sjasone
41234370Sjasone	/* Aggregate stats for small size classes, based on bin stats. */
42234370Sjasone	size_t			allocated_small;
43234370Sjasone	uint64_t		nmalloc_small;
44234370Sjasone	uint64_t		ndalloc_small;
45234370Sjasone	uint64_t		nrequests_small;
46234370Sjasone
47234370Sjasone	malloc_bin_stats_t	bstats[NBINS];
48234370Sjasone	malloc_large_stats_t	*lstats;	/* nlclasses elements. */
49234370Sjasone};
50234370Sjasone
51234370Sjasonestruct ctl_stats_s {
52234370Sjasone	size_t			allocated;
53234370Sjasone	size_t			active;
54234370Sjasone	size_t			mapped;
55234370Sjasone	struct {
56234370Sjasone		size_t		current;	/* stats_chunks.curchunks */
57234370Sjasone		uint64_t	total;		/* stats_chunks.nchunks */
58234370Sjasone		size_t		high;		/* stats_chunks.highchunks */
59234370Sjasone	} chunks;
60234370Sjasone	struct {
61234370Sjasone		size_t		allocated;	/* huge_allocated */
62234370Sjasone		uint64_t	nmalloc;	/* huge_nmalloc */
63234370Sjasone		uint64_t	ndalloc;	/* huge_ndalloc */
64234370Sjasone	} huge;
65242844Sjasone	unsigned		narenas;
66234370Sjasone	ctl_arena_stats_t	*arenas;	/* (narenas + 1) elements. */
67234370Sjasone};
68234370Sjasone
69234370Sjasone#endif /* JEMALLOC_H_STRUCTS */
70234370Sjasone/******************************************************************************/
71234370Sjasone#ifdef JEMALLOC_H_EXTERNS
72234370Sjasone
73234370Sjasoneint	ctl_byname(const char *name, void *oldp, size_t *oldlenp, void *newp,
74234370Sjasone    size_t newlen);
75234370Sjasoneint	ctl_nametomib(const char *name, size_t *mibp, size_t *miblenp);
76234370Sjasone
77234370Sjasoneint	ctl_bymib(const size_t *mib, size_t miblen, void *oldp, size_t *oldlenp,
78234370Sjasone    void *newp, size_t newlen);
79234370Sjasonebool	ctl_boot(void);
80242844Sjasonevoid	ctl_prefork(void);
81242844Sjasonevoid	ctl_postfork_parent(void);
82242844Sjasonevoid	ctl_postfork_child(void);
83234370Sjasone
84234370Sjasone#define	xmallctl(name, oldp, oldlenp, newp, newlen) do {		\
85234370Sjasone	if (je_mallctl(name, oldp, oldlenp, newp, newlen)		\
86234370Sjasone	    != 0) {							\
87234370Sjasone		malloc_printf(						\
88234370Sjasone		    "<jemalloc>: Failure in xmallctl(\"%s\", ...)\n",	\
89234370Sjasone		    name);						\
90234370Sjasone		abort();						\
91234370Sjasone	}								\
92234370Sjasone} while (0)
93234370Sjasone
94234370Sjasone#define	xmallctlnametomib(name, mibp, miblenp) do {			\
95234370Sjasone	if (je_mallctlnametomib(name, mibp, miblenp) != 0) {		\
96234370Sjasone		malloc_printf("<jemalloc>: Failure in "			\
97234370Sjasone		    "xmallctlnametomib(\"%s\", ...)\n", name);		\
98234370Sjasone		abort();						\
99234370Sjasone	}								\
100234370Sjasone} while (0)
101234370Sjasone
102234370Sjasone#define	xmallctlbymib(mib, miblen, oldp, oldlenp, newp, newlen) do {	\
103234370Sjasone	if (je_mallctlbymib(mib, miblen, oldp, oldlenp, newp,		\
104234370Sjasone	    newlen) != 0) {						\
105234370Sjasone		malloc_write(						\
106234370Sjasone		    "<jemalloc>: Failure in xmallctlbymib()\n");	\
107234370Sjasone		abort();						\
108234370Sjasone	}								\
109234370Sjasone} while (0)
110234370Sjasone
111234370Sjasone#endif /* JEMALLOC_H_EXTERNS */
112234370Sjasone/******************************************************************************/
113234370Sjasone#ifdef JEMALLOC_H_INLINES
114234370Sjasone
115234370Sjasone#endif /* JEMALLOC_H_INLINES */
116234370Sjasone/******************************************************************************/
117234370Sjasone
118