RTEMS CPU Kit with SuperCore
4.11.3
Main Page
Related Pages
Modules
+
Data Structures
Data Structures
+
Data Fields
+
All
a
b
c
d
e
f
g
h
i
j
k
l
m
n
o
p
q
r
s
t
u
v
w
x
y
+
Variables
a
b
c
d
e
f
g
h
i
j
k
l
m
n
o
p
q
r
s
t
u
v
w
x
y
+
Files
File List
+
Globals
+
All
_
a
b
c
d
e
f
g
h
i
j
l
m
n
o
p
q
r
s
t
u
v
w
x
+
Functions
_
a
b
c
d
e
f
g
i
j
l
m
n
o
p
q
r
s
t
u
v
w
+
Variables
_
b
c
d
i
r
+
Typedefs
a
b
c
d
f
h
i
m
o
p
q
r
s
t
u
w
x
+
Enumerations
b
c
d
e
h
i
m
o
p
r
s
t
w
+
Enumerator
c
i
m
p
r
s
t
w
+
Macros
_
a
b
c
d
e
f
g
h
i
l
m
n
o
p
r
s
t
w
mnt
data0
chrisj
rtems
releases
rtems-release.git
4.11.3
ws-rtems
rtems-4.11.3
cpukit
libnetworking
sys
malloc.h
Go to the documentation of this file.
1
/*
2
* Copyright (c) 1987, 1993
3
* The Regents of the University of California. All rights reserved.
4
*
5
* Redistribution and use in source and binary forms, with or without
6
* modification, are permitted provided that the following conditions
7
* are met:
8
* 1. Redistributions of source code must retain the above copyright
9
* notice, this list of conditions and the following disclaimer.
10
* 2. Redistributions in binary form must reproduce the above copyright
11
* notice, this list of conditions and the following disclaimer in the
12
* documentation and/or other materials provided with the distribution.
13
* 3. All advertising materials mentioning features or use of this software
14
* must display the following acknowledgement:
15
* This product includes software developed by the University of
16
* California, Berkeley and its contributors.
17
* 4. Neither the name of the University nor the names of its contributors
18
* may be used to endorse or promote products derived from this software
19
* without specific prior written permission.
20
*
21
* THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
22
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
23
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
24
* ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
25
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
26
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
27
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
28
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
29
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
30
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
31
* SUCH DAMAGE.
32
*
33
* @(#)malloc.h 8.5 (Berkeley) 5/3/95
34
*/
35
36
#ifndef _SYS_MALLOC_H_
37
#define _SYS_MALLOC_H_
38
39
#include <
rtems/rtems_bsdnet_internal.h
>
/* Ensure we get RTEMS malloc hooks */
40
#define KMEMSTATS
41
42
/*
43
* flags to malloc
44
*/
45
#define M_WAITOK 0x0000
46
#define M_NOWAIT 0x0001
47
#define M_KERNEL 0x0002
48
49
/*
50
* Types of memory to be allocated
51
*/
52
#define M_FREE 0
/* should be on free list */
53
#define M_MBUF 1
/* mbuf */
54
#define M_DEVBUF 2
/* device driver memory */
55
#define M_SOCKET 3
/* socket structure */
56
#define M_PCB 4
/* protocol control block */
57
#define M_RTABLE 5
/* routing tables */
58
#define M_HTABLE 6
/* IMP host tables */
59
#define M_FTABLE 7
/* fragment reassembly header */
60
#define M_ZOMBIE 8
/* zombie proc status */
61
#define M_IFADDR 9
/* interface address */
62
#define M_SOOPTS 10
/* socket options */
63
#define M_SONAME 11
/* socket name */
64
#define M_NAMEI 12
/* namei path name buffer */
65
#define M_GPROF 13
/* kernel profiling buffer */
66
#define M_IOCTLOPS 14
/* ioctl data buffer */
67
#define M_MAPMEM 15
/* mapped memory descriptors */
68
#define M_CRED 16
/* credentials */
69
#define M_PGRP 17
/* process group header */
70
#define M_SESSION 18
/* session header */
71
#define M_IOV 19
/* large iov's */
72
#define M_MOUNT 20
/* vfs mount struct */
73
#define M_FHANDLE 21
/* network file handle */
74
#define M_NFSREQ 22
/* NFS request header */
75
#define M_NFSMNT 23
/* NFS mount structure */
76
#define M_NFSNODE 24
/* NFS vnode private part */
77
#define M_VNODE 25
/* Dynamically allocated vnodes */
78
#define M_CACHE 26
/* Dynamically allocated cache entries */
79
#define M_DQUOT 27
/* UFS quota entries */
80
#define M_UFSMNT 28
/* UFS mount structure */
81
#define M_SHM 29
/* SVID compatible shared memory segments */
82
#define M_VMMAP 30
/* VM map structures */
83
#define M_VMMAPENT 31
/* VM map entry structures */
84
#define M_VMOBJ 32
/* VM object structure */
85
#define M_VMOBJHASH 33
/* VM object hash structure */
86
#define M_VMPMAP 34
/* VM pmap */
87
#define M_VMPVENT 35
/* VM phys-virt mapping entry */
88
#define M_VMPAGER 36
/* XXX: VM pager struct */
89
#define M_VMPGDATA 37
/* XXX: VM pager private data */
90
#define M_FILE 38
/* Open file structure */
91
#define M_FILEDESC 39
/* Open file descriptor table */
92
#define M_LOCKF 40
/* Byte-range locking structures */
93
#define M_PROC 41
/* Proc structures */
94
#define M_SUBPROC 42
/* Proc sub-structures */
95
#define M_SEGMENT 43
/* Segment for LFS */
96
#define M_LFSNODE 44
/* LFS vnode private part */
97
#define M_FFSNODE 45
/* FFS vnode private part */
98
#define M_MFSNODE 46
/* MFS vnode private part */
99
#define M_NQLEASE 47
/* Nqnfs lease */
100
#define M_NQMHOST 48
/* Nqnfs host address table */
101
#define M_NETADDR 49
/* Export host address structure */
102
#define M_NFSSVC 50
/* Nfs server structure */
103
#define M_NFSUID 51
/* Nfs uid mapping structure */
104
#define M_NFSD 52
/* Nfs server daemon structure */
105
#define M_IPMOPTS 53
/* internet multicast options */
106
#define M_IPMADDR 54
/* internet multicast address */
107
#define M_IFMADDR 55
/* link-level multicast address */
108
#define M_MRTABLE 56
/* multicast routing tables */
109
#define M_ISOFSMNT 57
/* ISOFS mount structure */
110
#define M_ISOFSNODE 58
/* ISOFS vnode private part */
111
#define M_NFSRVDESC 59
/* NFS server socket descriptor */
112
#define M_NFSDIROFF 60
/* NFS directory offset data */
113
#define M_NFSBIGFH 61
/* NFS version 3 file handle */
114
#define M_MSDOSFSMNT 67
/* MSDOSFS mount structure */
115
#define M_MSDOSFSNODE 68
/* MSDOSFS vnode private part */
116
#define M_MSDOSFSFAT 69
/* MSDOSFS file allocation table */
117
#define M_DEVFSMNT 70
/* DEVFS mount structure */
118
#define M_DEVFSBACK 71
/* DEVFS Back node */
119
#define M_DEVFSFRONT 72
/* DEVFS Front node */
120
#define M_DEVFSNODE 73
/* DEVFS node */
121
#define M_TEMP 74
/* misc temporary data buffers */
122
#define M_TTYS 75
/* tty data structures */
123
#define M_GZIP 76
/* Gzip trees */
124
#define M_IPFW 77
/* IpFw/IpAcct chain's */
125
#define M_DEVL 78
/* isa_device lists in userconfig() */
126
#define M_PKTCLASS 79
/* structures used in packet classifier */
127
#define M_SYSCTL 80
/* sysctl internal magic */
128
#define M_SECA 81
/* security associations, key management */
129
#define M_BIOBUF 82
/* BIO buffer */
130
#define M_KTRACE 83
/* KTRACE */
131
#define M_SELECT 84
/* select() buffer */
132
#define M_CFS 85
/* Coda */
133
#define M_LAST 86
/* Must be last type + 1 */
134
135
#define INITKMEMNAMES { \
136
"free",
/* 0 M_FREE */
\
137
"mbuf",
/* 1 M_MBUF */
\
138
"devbuf",
/* 2 M_DEVBUF */
\
139
"socket",
/* 3 M_SOCKET */
\
140
"pcb",
/* 4 M_PCB */
\
141
"routetbl",
/* 5 M_RTABLE */
\
142
"hosttbl",
/* 6 M_HTABLE */
\
143
"fragtbl",
/* 7 M_FTABLE */
\
144
"zombie",
/* 8 M_ZOMBIE */
\
145
"ifaddr",
/* 9 M_IFADDR */
\
146
"soopts",
/* 10 M_SOOPTS */
\
147
"soname",
/* 11 M_SONAME */
\
148
"namei",
/* 12 M_NAMEI */
\
149
"gprof",
/* 13 M_GPROF */
\
150
"ioctlops",
/* 14 M_IOCTLOPS */
\
151
"mapmem",
/* 15 M_MAPMEM */
\
152
"cred",
/* 16 M_CRED */
\
153
"pgrp",
/* 17 M_PGRP */
\
154
"session",
/* 18 M_SESSION */
\
155
"iov",
/* 19 M_IOV */
\
156
"mount",
/* 20 M_MOUNT */
\
157
"fhandle",
/* 21 M_FHANDLE */
\
158
"NFS req",
/* 22 M_NFSREQ */
\
159
"NFS mount",
/* 23 M_NFSMNT */
\
160
"NFS node",
/* 24 M_NFSNODE */
\
161
"vnodes",
/* 25 M_VNODE */
\
162
"namecache",
/* 26 M_CACHE */
\
163
"UFS quota",
/* 27 M_DQUOT */
\
164
"UFS mount",
/* 28 M_UFSMNT */
\
165
"shm",
/* 29 M_SHM */
\
166
"VM map",
/* 30 M_VMMAP */
\
167
"VM mapent",
/* 31 M_VMMAPENT */
\
168
"VM object",
/* 32 M_VMOBJ */
\
169
"VM objhash",
/* 33 M_VMOBJHASH */
\
170
"VM pmap",
/* 34 M_VMPMAP */
\
171
"VM pvmap",
/* 35 M_VMPVENT */
\
172
"VM pager",
/* 36 M_VMPAGER */
\
173
"VM pgdata",
/* 37 M_VMPGDATA */
\
174
"file",
/* 38 M_FILE */
\
175
"file desc",
/* 39 M_FILEDESC */
\
176
"lockf",
/* 40 M_LOCKF */
\
177
"proc",
/* 41 M_PROC */
\
178
"subproc",
/* 42 M_SUBPROC */
\
179
"LFS segment",
/* 43 M_SEGMENT */
\
180
"LFS node",
/* 44 M_LFSNODE */
\
181
"FFS node",
/* 45 M_FFSNODE */
\
182
"MFS node",
/* 46 M_MFSNODE */
\
183
"NQNFS Lease",
/* 47 M_NQLEASE */
\
184
"NQNFS Host",
/* 48 M_NQMHOST */
\
185
"Export Host",
/* 49 M_NETADDR */
\
186
"NFS srvsock",
/* 50 M_NFSSVC */
\
187
"NFS uid",
/* 51 M_NFSUID */
\
188
"NFS daemon",
/* 52 M_NFSD */
\
189
"ip_moptions",
/* 53 M_IPMOPTS */
\
190
"in_multi",
/* 54 M_IPMADDR */
\
191
"ether_multi",
/* 55 M_IFMADDR */
\
192
"mrt",
/* 56 M_MRTABLE */
\
193
"ISOFS mount",
/* 57 M_ISOFSMNT */
\
194
"ISOFS node",
/* 58 M_ISOFSNODE */
\
195
"NFSV3 srvdesc",
/* 59 M_NFSRVDESC */
\
196
"NFSV3 diroff",
/* 60 M_NFSDIROFF */
\
197
"NFSV3 bigfh",
/* 61 M_NFSBIGFH */
\
198
NULL, \
199
NULL, NULL, NULL, NULL, \
200
"MSDOSFS mount",
/* 67 M_MSDOSFSMNT */
\
201
"MSDOSFS node",
/* 68 M_MSDOSFSNODE */
\
202
"MSDOSFS FAT",
/* 69 M_MSDOSFSFAR */
\
203
"DEVFS mount",
/* 70 M_DEVFSMNT */
\
204
"DEVFS back",
/* 71 M_DEVFSBACK */
\
205
"DEVFS front",
/* 72 M_DEVFSFRONT */
\
206
"DEVFS node",
/* 73 M_DEVFSNODE */
\
207
"temp",
/* 74 M_TEMP */
\
208
"ttys",
/* 75 M_TTYS */
\
209
"Gzip trees",
/* 76 M_GZIP */
\
210
"IpFw/IpAcct",
/* 77 M_IPFW */
\
211
"isa_devlist",
/* 78 M_DEVL */
\
212
"PktClass",
/* 79 M_PKTCLASS */
\
213
"sysctl",
/* 80 M_SYSCTL */
\
214
"key mgmt",
/* 81 M_SECA */
\
215
"BIO buffer",
/* 82 M_BIOBUF */
\
216
"KTRACE",
/* 83 M_KTRACE */
\
217
"select",
/* 84 M_SELECT */
\
218
"Coda",
/* 85 M_CFS */
\
219
}
220
221
struct
kmemstats {
222
long
ks_inuse;
/* # of packets of this type currently in use */
223
long
ks_calls;
/* total packets of this type ever allocated */
224
long
ks_memuse;
/* total memory held in bytes */
225
u_short ks_limblocks;
/* number of times blocked for hitting limit */
226
u_short ks_mapblocks;
/* number of times blocked for kernel map */
227
long
ks_maxused;
/* maximum number ever used */
228
long
ks_limit;
/* most that are allowed to exist */
229
long
ks_size;
/* sizes of this thing that are allocated */
230
long
ks_spare;
231
};
232
233
/*
234
* Array of descriptors that describe the contents of each page
235
*/
236
struct
kmemusage {
237
short
ku_indx;
/* bucket index */
238
union
{
239
u_short freecnt;
/* for small allocations, free pieces in page */
240
u_short pagecnt;
/* for large allocations, pages alloced */
241
} ku_un;
242
};
243
#define ku_freecnt ku_un.freecnt
244
#define ku_pagecnt ku_un.pagecnt
245
246
/*
247
* Set of buckets for each size of memory block that is retained
248
*/
249
struct
kmembuckets
{
250
caddr_t kb_next;
/* list of free blocks */
251
caddr_t kb_last;
/* last free block */
252
long
kb_calls;
/* total calls to allocate this size */
253
long
kb_total;
/* total number of blocks allocated */
254
long
kb_totalfree;
/* # of free elements in this bucket */
255
long
kb_elmpercl;
/* # of elements in this sized allocation */
256
long
kb_highwat;
/* high water mark */
257
long
kb_couldfree;
/* over high water mark and could free */
258
};
259
260
#ifdef _KERNEL
261
#define MINALLOCSIZE (1 << MINBUCKET)
262
#define BUCKETINDX(size) \
263
((size) <= (MINALLOCSIZE * 128) \
264
? (size) <= (MINALLOCSIZE * 8) \
265
? (size) <= (MINALLOCSIZE * 2) \
266
? (size) <= (MINALLOCSIZE * 1) \
267
? (MINBUCKET + 0) \
268
: (MINBUCKET + 1) \
269
: (size) <= (MINALLOCSIZE * 4) \
270
? (MINBUCKET + 2) \
271
: (MINBUCKET + 3) \
272
: (size) <= (MINALLOCSIZE* 32) \
273
? (size) <= (MINALLOCSIZE * 16) \
274
? (MINBUCKET + 4) \
275
: (MINBUCKET + 5) \
276
: (size) <= (MINALLOCSIZE * 64) \
277
? (MINBUCKET + 6) \
278
: (MINBUCKET + 7) \
279
: (size) <= (MINALLOCSIZE * 2048) \
280
? (size) <= (MINALLOCSIZE * 512) \
281
? (size) <= (MINALLOCSIZE * 256) \
282
? (MINBUCKET + 8) \
283
: (MINBUCKET + 9) \
284
: (size) <= (MINALLOCSIZE * 1024) \
285
? (MINBUCKET + 10) \
286
: (MINBUCKET + 11) \
287
: (size) <= (MINALLOCSIZE * 8192) \
288
? (size) <= (MINALLOCSIZE * 4096) \
289
? (MINBUCKET + 12) \
290
: (MINBUCKET + 13) \
291
: (size) <= (MINALLOCSIZE * 16384) \
292
? (MINBUCKET + 14) \
293
: (MINBUCKET + 15))
294
295
/*
296
* Turn virtual addresses into kmem map indices
297
*/
298
#define kmemxtob(alloc) (kmembase + (alloc) * PAGE_SIZE)
299
#define btokmemx(addr) (((caddr_t)(addr) - kmembase) / PAGE_SIZE)
300
#define btokup(addr) (&kmemusage[(caddr_t)(addr) - kmembase >> PAGE_SHIFT])
301
302
/*
303
* Macro versions for the usual cases of malloc/free
304
*/
305
#if defined(KMEMSTATS) || defined(DIAGNOSTIC)
306
#define MALLOC(space, cast, size, type, flags) \
307
(space) = (cast)malloc((u_long)(size), type, flags)
308
#define FREE(addr, type) free((addr), type)
309
310
#else
/* do not collect statistics */
311
#define MALLOC(space, cast, size, type, flags) { \
312
register struct kmembuckets *kbp = &bucket[BUCKETINDX(size)]; \
313
long s = splimp(); \
314
if (kbp->kb_next == NULL) { \
315
(space) = (cast)malloc((u_long)(size), type, flags); \
316
} else { \
317
(space) = (cast)kbp->kb_next; \
318
kbp->kb_next = *(caddr_t *)(space); \
319
} \
320
splx(s); \
321
}
322
323
#define FREE(addr, type) { \
324
register struct kmembuckets *kbp; \
325
register struct kmemusage *kup = btokup(addr); \
326
long s = splimp(); \
327
if (1 << kup->ku_indx > MAXALLOCSAVE) { \
328
free((addr), type); \
329
} else { \
330
kbp = &bucket[kup->ku_indx]; \
331
if (kbp->kb_next == NULL) \
332
kbp->kb_next = (caddr_t)(addr); \
333
else \
334
*(caddr_t *)(kbp->kb_last) = (caddr_t)(addr); \
335
*(caddr_t *)(addr) = NULL; \
336
kbp->kb_last = (caddr_t)(addr); \
337
} \
338
splx(s); \
339
}
340
#endif
/* do not collect statistics */
341
342
extern
struct
kmemstats kmemstats[];
343
extern
struct
kmemusage *kmemusage;
344
extern
char
*kmembase;
345
extern
struct
kmembuckets
bucket[];
346
347
void
free (
void
*addr,
int
type);
348
void
*malloc (
size_t
size,
int
type,
int
flags);
349
/* standard realloc but we cannot include stdlib.h */
350
void
*realloc(
void
* __r,
size_t
__size);
351
352
#endif
/* _KERNEL */
353
354
#endif
/* !_SYS_MALLOC_H_ */
rtems_bsdnet_internal.h
kmembuckets
Definition:
malloc.h:250
Generated by
1.8.13