FreeBSD/Linux Kernel Cross Reference
sys/sys/mallocvar.h
1 /* $NetBSD: mallocvar.h,v 1.7 2007/11/07 16:12:25 matt 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 /*
42 * This structure describes a type of malloc'd memory and carries
43 * allocation statistics for that memory.
44 */
45 struct malloc_type {
46 struct malloc_type *ks_next; /* next in list */
47 u_long ks_magic; /* indicates valid structure */
48 const char *ks_shortdesc;/* short description */
49
50 /* Statistics */
51 u_long ks_inuse; /* # of packets of this type currently in use */
52 u_long ks_calls; /* total packets of this type ever allocated */
53 u_long ks_memuse; /* total memory held in bytes */
54 u_short ks_limblocks; /* number of times blocked for hitting limit */
55 u_short ks_mapblocks; /* number of times blocked for kernel map */
56 u_long ks_maxused; /* maximum number ever used */
57 u_long ks_limit; /* most that are allowed to exist */
58 u_long ks_size; /* sizes of this thing that are allocated */
59 u_long ks_spare;
60 };
61
62 #ifdef _KERNEL
63 #define MALLOC_JUSTDEFINE_LIMIT(type, shortdesc, longdesc, limit) \
64 struct malloc_type type[1] = { \
65 [0] = { \
66 .ks_magic = M_MAGIC, \
67 .ks_shortdesc = shortdesc, \
68 .ks_limit = limit, \
69 }, \
70 };
71
72 #define MALLOC_JUSTDEFINE(type, shortdesc, longdesc) \
73 MALLOC_JUSTDEFINE_LIMIT(type, shortdesc, longdesc, 0)
74
75 #define MALLOC_DEFINE_LIMIT(type, shortdesc, longdesc, limit) \
76 MALLOC_JUSTDEFINE_LIMIT(type, shortdesc, longdesc, limit) \
77 __link_set_add_data(malloc_types, type)
78
79 #define MALLOC_DEFINE(type, shortdesc, longdesc) \
80 MALLOC_DEFINE_LIMIT(type, shortdesc, longdesc, 0)
81
82 #define MALLOC_DECLARE(type) \
83 extern struct malloc_type type[1]
84
85 void malloc_type_attach(struct malloc_type *);
86 void malloc_type_detach(struct malloc_type *);
87
88 void malloc_type_setlimit(struct malloc_type *, u_long);
89 #endif /* _KERNEL */
90
91 #endif /* _SYS_MALLOCVAR_H_ */
Cache object: 561adf21f40ff84a462a6c10a06ad261
|