FreeBSD/Linux Kernel Cross Reference
sys/sys/mallocvar.h
1 /* $NetBSD: mallocvar.h,v 1.3 2003/08/07 16:34:07 agc 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_DEFINE_LIMIT(type, shortdesc, longdesc, limit) \
64 struct malloc_type type[1] = { \
65 { NULL, M_MAGIC, shortdesc, \
66 0, /* ks_inuse */ \
67 0, /* ks_calls */ \
68 0, /* ks_memuse */ \
69 0, /* ks_limblocks */ \
70 0, /* ks_mapblocks */ \
71 0, /* ks_maxused */ \
72 limit } \
73 }; \
74 __link_set_add_data(malloc_types, type)
75
76 #define MALLOC_DEFINE(type, shortdesc, longdesc) \
77 MALLOC_DEFINE_LIMIT(type, shortdesc, longdesc, 0)
78
79 #define MALLOC_DECLARE(type) \
80 extern struct malloc_type type[1]
81
82 void malloc_type_attach(struct malloc_type *);
83 void malloc_type_detach(struct malloc_type *);
84
85 void malloc_type_setlimit(struct malloc_type *, u_long);
86 #endif /* _KERNEL */
87
88 #endif /* _SYS_MALLOCVAR_H_ */
Cache object: b630e2829b2990d8ba9898ede2d77a7f
|