No empty .Rs/.Re
[netbsd-mini2440.git] / share / man / man9 / malloc.9
blob4dcacb04bd0c97c7728dd375a0c0e9867f1b05ac
1 .\"     $NetBSD: malloc.9,v 1.46 2009/03/09 17:29:25 joerg Exp $
2 .\"
3 .\" Copyright (c) 1996, 2003 The NetBSD Foundation, Inc.
4 .\" All rights reserved.
5 .\"
6 .\" This code is derived from software contributed to The NetBSD Foundation
7 .\" by Paul Kranenburg, and by Jason R. Thorpe.
8 .\"
9 .\" Redistribution and use in source and binary forms, with or without
10 .\" modification, are permitted provided that the following conditions
11 .\" are met:
12 .\" 1. Redistributions of source code must retain the above copyright
13 .\"    notice, this list of conditions and the following disclaimer.
14 .\" 2. Redistributions in binary form must reproduce the above copyright
15 .\"    notice, this list of conditions and the following disclaimer in the
16 .\"    documentation and/or other materials provided with the distribution.
17 .\"
18 .\" THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
19 .\" ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
20 .\" TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
21 .\" PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
22 .\" BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
23 .\" CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
24 .\" SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
25 .\" INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
26 .\" CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
27 .\" ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
28 .\" POSSIBILITY OF SUCH DAMAGE.
29 .\"
30 .Dd December 29, 2008
31 .Dt MALLOC 9
32 .Os
33 .Sh NAME
34 .Nm malloc ,
35 .Nm MALLOC ,
36 .Nm realloc ,
37 .Nm free ,
38 .Nm FREE ,
39 .Nm malloc_roundup ,
40 .Nm malloc_type_attach ,
41 .Nm malloc_type_detach ,
42 .Nm malloc_type_setlimit ,
43 .Nm MALLOC_DEFINE_LIMIT ,
44 .Nm MALLOC_DEFINE ,
45 .Nm MALLOC_DECLARE
46 .Nd general-purpose kernel memory allocator
47 .Sh SYNOPSIS
48 .In sys/malloc.h
49 .Ft void *
50 .Fn malloc "unsigned long size" "struct malloc_type *type" "int flags"
51 .Ft void *
52 .Fn realloc "void *addr" "unsigned long newsize" "struct malloc_type *type" \
53     "int flags"
54 .Ft void
55 .Fn free "void *addr" "struct malloc_type *type"
56 .Ft unsigned long
57 .Fn malloc_roundup "unsigned long size"
58 .Ft void
59 .Fn malloc_type_attach "struct malloc_type *type"
60 .Ft void
61 .Fn malloc_type_detach "struct malloc_type *type"
62 .Ft void
63 .Fn malloc_type_setlimit "struct malloc_type *type" "unsigned long limit"
64 .In sys/mallocvar.h
65 .Fn MALLOC_DEFINE_LIMIT "type" "shortdesc" "longdesc" "limit"
66 .Fn MALLOC_JUSTDEFINE_LIMIT "type" "shortdesc" "longdesc" "limit"
67 .Fn MALLOC_DEFINE "type" "shortdesc" "longdesc"
68 .Fn MALLOC_JUSTDEFINE "type" "shortdesc" "longdesc"
69 .Fn MALLOC_DECLARE "type"
70 .Sh DESCRIPTION
71 .Bf -symbolic
72 These interfaces are being obsoleted and their new use is discouraged.
73 For new code, use
74 .Xr kmem 9
76 .Xr pool_cache 9
77 instead.
78 .Ef
79 .Pp
80 The
81 .Fn malloc
82 function allocates uninitialized memory in kernel address space for an
83 object whose size is specified by
84 .Fa size .
85 .Fn malloc_roundup
86 returns the actual size of the allocation unit for the given value.
87 .Fn free
88 releases memory at address
89 .Fa addr
90 that was previously allocated by
91 .Fn malloc
92 for re-use.
93 Unlike
94 .Xr free 3 ,
95 .Fn free
96 does not accept an
97 .Fa addr
98 argument that is
99 .Dv NULL .
102 .Fn realloc
103 function changes the size of the previously allocated memory referenced
105 .Fa addr
107 .Fa size
108 and returns a pointer to the
109 .Pq possibly moved
110 object.
111 The memory contents are unchanged up to the lesser of the new
112 and old sizes.
113 If the new size is larger, the newly allocated memory is
114 uninitialized.
115 If the requested memory cannot be allocated,
116 .Dv NULL
117 is returned and the memory referenced by
118 .Fa addr
119 is unchanged.
121 .Fa addr
123 .Dv NULL ,
124 then
125 .Fn realloc
126 behaves exactly as
127 .Fn malloc .
128 If the new size is 0, then
129 .Fn realloc
130 behaves exactly as
131 .Fn free .
133 Unlike its standard C library counterpart
134 .Pq Xr malloc 3 ,
135 the kernel version takes two more arguments.
138 .Fa flags
139 argument further qualifies
140 .Fn malloc
141 operational characteristics as follows:
142 .Bl -tag -offset indent -width M_CANFAIL
143 .It Dv M_NOWAIT
144 Causes
145 .Fn malloc
146 to return
147 .Dv NULL
148 if the request cannot be immediately fulfilled due to resource shortage.
149 If this flag is not set
150 (see
151 .Dv M_WAITOK ) ,
152 .Fn malloc
153 will never return
154 .Dv NULL .
155 .It Dv M_WAITOK
156 By default,
157 .Fn malloc
158 may call
159 .Xr cv_wait 9
160 to wait for resources to be released by other processes, and this
161 flag represents this behaviour.
162 Note that
163 .Dv M_WAITOK
164 is conveniently defined to be 0, and hence may be or'ed into the
165 .Fa flags
166 argument to indicate that it's ok to wait for resources.
167 .It Dv M_ZERO
168 Causes the allocated memory to be set to all zeros.
169 .It Dv M_CANFAIL
170 Changes behaviour for
171 .Dv M_WAITOK
172 case - if the requested memory size is bigger than
173 .Fn malloc
174 can ever allocate, return failure, rather than calling
175 .Xr panic 9 .
176 This is different to M_NOWAIT, since
177 the call can still wait for resources.
179 Rather than depending on
180 .Dv M_CANFAIL ,
181 kernel code should do proper bound checking itself.
182 This flag should only be used in cases where this is not feasible.
183 Since it can hide real kernel bugs, its usage is
184 .Em strongly discouraged .
188 .Fa type
189 argument describes the subsystem and/or use within a subsystem for which
190 the allocated memory was needed, and is commonly used to maintain statistics
191 about kernel memory usage and, optionally, enforce limits on this usage for
192 certain memory types.
194 In addition to some built-in generic types defined by the kernel
195 memory allocator, subsystems may define their own types.
198 .Fn MALLOC_DEFINE_LIMIT
199 macro defines a malloc type named
200 .Fa type
201 with the short description
202 .Fa shortdesc ,
203 which must be a constant string; this description will be used for
204 kernel memory statistics reporting.
206 .Fa longdesc
207 argument, also a constant string, is intended as way to place a
208 comment in the actual type definition, and is not currently stored
209 in the type structure.
211 .Fa limit
212 argument specifies the maximum amount of memory, in bytes, that this
213 malloc type can consume.
216 .Fn MALLOC_DEFINE
217 macro is equivalent to the
218 .Fn MALLOC_DEFINE_LIMIT
219 macro with a
220 .Fa limit
221 argument of 0.
222 If kernel memory statistics are being gathered, the system will
223 choose a reasonable default limit for the malloc type.
226 .Fn MALLOC_DECLARE
227 macro is intended for use in header files which are included by
228 code which needs to use the malloc type, providing the necessary
229 extern declaration.
231 Code which includes
232 \*[Lt]sys/malloc.h\*[Gt]
233 does not need to include
234 \*[Lt]sys/mallocvar.h\*[Gt]
235 to get these macro definitions.
237 \*[Lt]sys/mallocvar.h\*[Gt]
238 header file is intended for other header files which need to use the
239 .Fn MALLOC_DECLARE
240 macro.
243 .Fn malloc_type_attach
244 function attaches the malloc type
245 .Fa type
246 to the kernel memory allocator.
249 .Fn malloc_type_detach
250 function detaches the malloc type
251 .Fa type
252 previously attached with
253 .Fn malloc_type_attach .
256 .Fn malloc_type_setlimit
257 function sets the memory limit of the malloc type
258 .Fa type
260 .Fa limit
261 bytes.
262 The type must already be registered with the kernel memory allocator.
264 The following generic malloc types are currently defined:
266 .Bl -tag -offset indent -width XXXXXXXXXXXXXX -compact
267 .It Dv M_DEVBUF
268 Device driver memory.
269 .It Dv M_DMAMAP
270 .Xr bus_dma 9
271 structures.
272 .It Dv M_FREE
273 Should be on free list.
274 .It Dv M_PCB
275 Protocol control block.
276 .It Dv M_SOFTINTR
277 Softinterrupt structures.
278 .It Dv M_TEMP
279 Misc temporary data buffers.
282 Other malloc types are defined by the corresponding subsystem; see the
283 documentation for that subsystem for information its available malloc
284 types.
286 Statistics based on the
287 .Fa type
288 argument are maintained only if the kernel option
289 .Dv KMEMSTATS
290 is used when compiling the kernel
292 the default in current
294 kernels
296 and can be examined by using
297 .Sq vmstat -m .
298 .Sh RETURN VALUES
299 .Fn malloc
300 returns a kernel virtual address that is suitably aligned for storage of
301 any type of object.
302 .Sh DIAGNOSTICS
303 A kernel compiled with the
304 .Dv DIAGNOSTIC
305 configuration option attempts to detect memory corruption caused by
306 such things as writing outside the allocated area and imbalanced calls to the
307 .Fn malloc
309 .Fn free
310 functions.
311 Failing consistency checks will cause a panic or a system console message:
313 .Bl -bullet -offset indent -compact
315 panic:
316 .Dq malloc - bogus type
318 panic:
319 .Dq malloc: out of space in kmem_map
321 panic:
322 .Dq malloc: allocation too large
324 panic:
325 .Dq malloc: wrong bucket
327 panic:
328 .Dq malloc: lost data
330 panic:
331 .Dq free: unaligned addr
333 panic:
334 .Dq free: duplicated free
336 panic:
337 .Dq free: multiple frees
339 panic:
340 .Dq init: minbucket too small/struct freelist too big
342 .Dq multiply freed item Aq addr
344 .Dq Data modified on freelist: Aq data object description
346 .Sh SEE ALSO
347 .Xr vmstat 1 ,
348 .Xr memoryallocators 9