xref: /netbsd/sys/sys/mallocvar.h (revision 6550d01e)
1 /*	$NetBSD: mallocvar.h,v 1.9 2010/04/05 08:03:41 he Exp $	*/
2 
3 /*
4  * Copyright (c) 1987, 1993
5  *	The Regents of the University of California.  All rights reserved.
6  *
7  * Redistribution and use in source and binary forms, with or without
8  * modification, are permitted provided that the following conditions
9  * are met:
10  * 1. Redistributions of source code must retain the above copyright
11  *    notice, this list of conditions and the following disclaimer.
12  * 2. Redistributions in binary form must reproduce the above copyright
13  *    notice, this list of conditions and the following disclaimer in the
14  *    documentation and/or other materials provided with the distribution.
15  * 3. Neither the name of the University nor the names of its contributors
16  *    may be used to endorse or promote products derived from this software
17  *    without specific prior written permission.
18  *
19  * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
20  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
21  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
22  * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
23  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
24  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
25  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
26  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
27  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
28  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
29  * SUCH DAMAGE.
30  *
31  *	@(#)malloc.h	8.5 (Berkeley) 5/3/95
32  */
33 
34 #ifndef _SYS_MALLOCVAR_H_
35 #define	_SYS_MALLOCVAR_H_
36 
37 #include <sys/types.h>
38 
39 #define	M_MAGIC		877983977
40 
41 #define MAXBUCKET	15
42 /*
43  * This structure describes a type of malloc'd memory and carries
44  * allocation statistics for that memory.
45  */
46 struct malloc_type {
47 	struct malloc_type *ks_next;	/* next in list */
48 	u_long	ks_magic;	 /* indicates valid structure */
49 	const char *ks_shortdesc;/* short description */
50 
51 	/* Statistics */
52 	u_long	ks_inuse;	/* # of packets of this type currently in use */
53 	u_long	ks_calls;	/* total packets of this type ever allocated */
54 	u_long 	ks_memuse;	/* total memory held in bytes */
55 	u_short	ks_limblocks;	/* number of times blocked for hitting limit */
56 	u_short	ks_mapblocks;	/* number of times blocked for kernel map */
57 	u_long	ks_maxused;	/* maximum number ever used */
58 	u_long	ks_limit;	/* most that are allowed to exist */
59 	u_long	ks_size;	/* sizes of this thing that are allocated */
60 	u_short	ks_active[MAXBUCKET+1];	/* number of active allocations per size */
61 };
62 
63 #ifdef _KERNEL
64 #define	MALLOC_JUSTDEFINE_LIMIT(type, shortdesc, longdesc, limit)	\
65 struct malloc_type type[1] = {						\
66 	[0] = {								\
67 		.ks_magic = M_MAGIC,					\
68 		.ks_shortdesc = shortdesc,				\
69 		.ks_limit = limit,					\
70 	},								\
71 };
72 
73 #define	MALLOC_JUSTDEFINE(type, shortdesc, longdesc)			\
74 	MALLOC_JUSTDEFINE_LIMIT(type, shortdesc, longdesc, 0)
75 
76 #define	MALLOC_DEFINE_LIMIT(type, shortdesc, longdesc, limit)		\
77 	MALLOC_JUSTDEFINE_LIMIT(type, shortdesc, longdesc, limit)	\
78 	__link_set_add_data(malloc_types, type)
79 
80 #define	MALLOC_DEFINE(type, shortdesc, longdesc)			\
81 	MALLOC_DEFINE_LIMIT(type, shortdesc, longdesc, 0)
82 
83 #define	MALLOC_DECLARE(type)						\
84 	extern struct malloc_type type[1]
85 
86 void	malloc_type_attach(struct malloc_type *);
87 void	malloc_type_detach(struct malloc_type *);
88 
89 void	malloc_type_setlimit(struct malloc_type *, u_long);
90 #endif /* _KERNEL */
91 
92 #endif /* _SYS_MALLOCVAR_H_ */
93