2020-05-30 20:12:01 +03:00
|
|
|
.\" $NetBSD: malloc.9,v 1.56 2020/05/30 17:12:01 jdolecek Exp $
|
1996-06-17 03:20:53 +04:00
|
|
|
.\"
|
2003-02-01 09:27:23 +03:00
|
|
|
.\" Copyright (c) 1996, 2003 The NetBSD Foundation, Inc.
|
1996-06-17 03:20:53 +04:00
|
|
|
.\" All rights reserved.
|
|
|
|
.\"
|
|
|
|
.\" This code is derived from software contributed to The NetBSD Foundation
|
2003-02-01 09:27:23 +03:00
|
|
|
.\" by Paul Kranenburg, and by Jason R. Thorpe.
|
1996-06-17 03:20:53 +04:00
|
|
|
.\"
|
|
|
|
.\" Redistribution and use in source and binary forms, with or without
|
|
|
|
.\" modification, are permitted provided that the following conditions
|
|
|
|
.\" are met:
|
|
|
|
.\" 1. Redistributions of source code must retain the above copyright
|
|
|
|
.\" notice, this list of conditions and the following disclaimer.
|
|
|
|
.\" 2. Redistributions in binary form must reproduce the above copyright
|
|
|
|
.\" notice, this list of conditions and the following disclaimer in the
|
|
|
|
.\" documentation and/or other materials provided with the distribution.
|
|
|
|
.\"
|
|
|
|
.\" THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
|
|
|
|
.\" ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
|
|
|
|
.\" TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
|
2001-05-07 03:48:31 +04:00
|
|
|
.\" PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
|
1997-10-09 01:59:52 +04:00
|
|
|
.\" BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
|
1996-06-17 03:20:53 +04:00
|
|
|
.\" CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
|
|
|
|
.\" SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
|
|
|
.\" INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
|
|
|
|
.\" CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
|
|
|
.\" ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
|
|
|
.\" POSSIBILITY OF SUCH DAMAGE.
|
|
|
|
.\"
|
2020-05-30 20:12:01 +03:00
|
|
|
.Dd May 30, 2020
|
1996-06-17 03:20:53 +04:00
|
|
|
.Dt MALLOC 9
|
1999-03-16 03:40:46 +03:00
|
|
|
.Os
|
1996-06-17 03:20:53 +04:00
|
|
|
.Sh NAME
|
1997-11-11 13:06:37 +03:00
|
|
|
.Nm malloc ,
|
2003-02-01 09:27:23 +03:00
|
|
|
.Nm realloc ,
|
|
|
|
.Nm free ,
|
|
|
|
.Nm malloc_type_attach ,
|
|
|
|
.Nm malloc_type_detach ,
|
|
|
|
.Nm MALLOC_DEFINE ,
|
|
|
|
.Nm MALLOC_DECLARE
|
|
|
|
.Nd general-purpose kernel memory allocator
|
1996-06-17 03:20:53 +04:00
|
|
|
.Sh SYNOPSIS
|
2003-04-16 17:34:34 +04:00
|
|
|
.In sys/malloc.h
|
1996-06-17 03:20:53 +04:00
|
|
|
.Ft void *
|
2003-02-01 09:27:23 +03:00
|
|
|
.Fn malloc "unsigned long size" "struct malloc_type *type" "int flags"
|
|
|
|
.Ft void *
|
|
|
|
.Fn realloc "void *addr" "unsigned long newsize" "struct malloc_type *type" \
|
|
|
|
"int flags"
|
1996-06-17 03:20:53 +04:00
|
|
|
.Ft void
|
2003-07-16 12:13:34 +04:00
|
|
|
.Fn free "void *addr" "struct malloc_type *type"
|
2003-02-01 09:27:23 +03:00
|
|
|
.Ft void
|
|
|
|
.Fn malloc_type_attach "struct malloc_type *type"
|
|
|
|
.Ft void
|
|
|
|
.Fn malloc_type_detach "struct malloc_type *type"
|
2003-04-16 17:34:34 +04:00
|
|
|
.In sys/mallocvar.h
|
2003-02-01 09:27:23 +03:00
|
|
|
.Fn MALLOC_DEFINE "type" "shortdesc" "longdesc"
|
2007-03-29 20:29:37 +04:00
|
|
|
.Fn MALLOC_JUSTDEFINE "type" "shortdesc" "longdesc"
|
2003-02-01 09:27:23 +03:00
|
|
|
.Fn MALLOC_DECLARE "type"
|
1996-06-17 03:20:53 +04:00
|
|
|
.Sh DESCRIPTION
|
2008-03-24 11:24:48 +03:00
|
|
|
.Bf -symbolic
|
|
|
|
These interfaces are being obsoleted and their new use is discouraged.
|
2008-12-29 15:18:12 +03:00
|
|
|
For new code, use
|
2009-08-03 23:57:40 +04:00
|
|
|
.Xr kmem 9
|
2014-05-27 21:12:22 +04:00
|
|
|
for variable-sized or one-time allocations and
|
2008-03-24 11:24:48 +03:00
|
|
|
.Xr pool_cache 9
|
2014-05-27 21:12:22 +04:00
|
|
|
for frequent fixed-size allocations instead.
|
2008-03-24 11:24:48 +03:00
|
|
|
.Ef
|
|
|
|
.Pp
|
1996-06-17 03:20:53 +04:00
|
|
|
The
|
|
|
|
.Fn malloc
|
|
|
|
function allocates uninitialized memory in kernel address space for an
|
|
|
|
object whose size is specified by
|
|
|
|
.Fa size .
|
|
|
|
.Fn free
|
|
|
|
releases memory at address
|
|
|
|
.Fa addr
|
|
|
|
that was previously allocated by
|
|
|
|
.Fn malloc
|
|
|
|
for re-use.
|
2004-11-07 19:44:37 +03:00
|
|
|
Unlike
|
|
|
|
.Xr free 3 ,
|
|
|
|
.Fn free
|
|
|
|
does not accept an
|
|
|
|
.Fa addr
|
|
|
|
argument that is
|
|
|
|
.Dv NULL .
|
2003-02-01 09:27:23 +03:00
|
|
|
.Pp
|
|
|
|
The
|
|
|
|
.Fn realloc
|
|
|
|
function changes the size of the previously allocated memory referenced
|
|
|
|
by
|
|
|
|
.Fa addr
|
|
|
|
to
|
|
|
|
.Fa size
|
|
|
|
and returns a pointer to the
|
|
|
|
.Pq possibly moved
|
2003-02-01 15:52:49 +03:00
|
|
|
object.
|
|
|
|
The memory contents are unchanged up to the lesser of the new
|
2003-02-01 09:27:23 +03:00
|
|
|
and old sizes.
|
|
|
|
If the new size is larger, the newly allocated memory is
|
|
|
|
uninitialized.
|
|
|
|
If the requested memory cannot be allocated,
|
|
|
|
.Dv NULL
|
|
|
|
is returned and the memory referenced by
|
|
|
|
.Fa addr
|
|
|
|
is unchanged.
|
|
|
|
If
|
|
|
|
.Fa addr
|
|
|
|
is
|
|
|
|
.Dv NULL ,
|
|
|
|
then
|
|
|
|
.Fn realloc
|
|
|
|
behaves exactly as
|
|
|
|
.Fn malloc .
|
|
|
|
If the new size is 0, then
|
|
|
|
.Fn realloc
|
|
|
|
behaves exactly as
|
|
|
|
.Fn free .
|
|
|
|
.Pp
|
1996-06-17 03:20:53 +04:00
|
|
|
Unlike its standard C library counterpart
|
|
|
|
.Pq Xr malloc 3 ,
|
2001-11-17 06:50:27 +03:00
|
|
|
the kernel version takes two more arguments.
|
|
|
|
.Pp
|
|
|
|
The
|
1996-06-17 03:20:53 +04:00
|
|
|
.Fa flags
|
|
|
|
argument further qualifies
|
2001-12-04 23:39:02 +03:00
|
|
|
.Fn malloc
|
2001-05-07 03:48:31 +04:00
|
|
|
operational characteristics as follows:
|
2018-10-14 20:40:28 +03:00
|
|
|
.Bl -tag -offset indent -width M_NOWAIT
|
1996-06-17 03:20:53 +04:00
|
|
|
.It Dv M_NOWAIT
|
|
|
|
Causes
|
1996-10-30 08:29:54 +03:00
|
|
|
.Fn malloc
|
|
|
|
to return
|
1996-06-17 03:20:53 +04:00
|
|
|
.Dv NULL
|
|
|
|
if the request cannot be immediately fulfilled due to resource shortage.
|
2001-11-17 06:50:27 +03:00
|
|
|
If this flag is not set
|
|
|
|
(see
|
|
|
|
.Dv M_WAITOK ) ,
|
1996-06-17 03:20:53 +04:00
|
|
|
.Fn malloc
|
|
|
|
will never return
|
|
|
|
.Dv NULL .
|
2001-11-17 06:50:27 +03:00
|
|
|
.It Dv M_WAITOK
|
|
|
|
By default,
|
|
|
|
.Fn malloc
|
|
|
|
may call
|
2007-07-14 14:52:47 +04:00
|
|
|
.Xr cv_wait 9
|
2001-11-17 06:50:27 +03:00
|
|
|
to wait for resources to be released by other processes, and this
|
|
|
|
flag represents this behaviour.
|
1996-06-17 03:20:53 +04:00
|
|
|
Note that
|
|
|
|
.Dv M_WAITOK
|
2001-12-04 23:39:02 +03:00
|
|
|
is conveniently defined to be 0, and hence may be or'ed into the
|
1996-06-17 03:20:53 +04:00
|
|
|
.Fa flags
|
2001-12-05 02:42:02 +03:00
|
|
|
argument to indicate that it's ok to wait for resources.
|
2001-11-17 06:50:27 +03:00
|
|
|
.It Dv M_ZERO
|
|
|
|
Causes the allocated memory to be set to all zeros.
|
1996-06-17 03:20:53 +04:00
|
|
|
.El
|
|
|
|
.Pp
|
|
|
|
The
|
|
|
|
.Fa type
|
2003-02-01 09:27:23 +03:00
|
|
|
argument describes the subsystem and/or use within a subsystem for which
|
|
|
|
the allocated memory was needed, and is commonly used to maintain statistics
|
2003-02-01 15:52:49 +03:00
|
|
|
about kernel memory usage and, optionally, enforce limits on this usage for
|
2003-02-01 09:27:23 +03:00
|
|
|
certain memory types.
|
|
|
|
.Pp
|
|
|
|
In addition to some built-in generic types defined by the kernel
|
|
|
|
memory allocator, subsystems may define their own types.
|
|
|
|
.Pp
|
|
|
|
The
|
2014-12-27 22:32:57 +03:00
|
|
|
.Fn MALLOC_DEFINE
|
2003-02-01 09:27:23 +03:00
|
|
|
macro defines a malloc type named
|
|
|
|
.Fa type
|
|
|
|
with the short description
|
|
|
|
.Fa shortdesc ,
|
|
|
|
which must be a constant string; this description will be used for
|
|
|
|
kernel memory statistics reporting.
|
|
|
|
The
|
|
|
|
.Fa longdesc
|
|
|
|
argument, also a constant string, is intended as way to place a
|
|
|
|
comment in the actual type definition, and is not currently stored
|
2014-12-27 23:45:08 +03:00
|
|
|
in the type structure.
|
|
|
|
If kernel memory statistics are being
|
2014-12-27 22:32:57 +03:00
|
|
|
gathered, the system will choose a reasonable default limit for
|
|
|
|
the malloc type.
|
2003-02-01 09:27:23 +03:00
|
|
|
.Pp
|
|
|
|
The
|
|
|
|
.Fn MALLOC_DECLARE
|
|
|
|
macro is intended for use in header files which are included by
|
|
|
|
code which needs to use the malloc type, providing the necessary
|
|
|
|
extern declaration.
|
|
|
|
.Pp
|
|
|
|
Code which includes
|
2017-07-04 00:28:48 +03:00
|
|
|
<sys/malloc.h>
|
2003-02-01 09:27:23 +03:00
|
|
|
does not need to include
|
2017-07-04 00:28:48 +03:00
|
|
|
<sys/mallocvar.h>
|
2003-02-01 09:27:23 +03:00
|
|
|
to get these macro definitions.
|
|
|
|
The
|
2017-07-04 00:28:48 +03:00
|
|
|
<sys/mallocvar.h>
|
2003-02-01 09:27:23 +03:00
|
|
|
header file is intended for other header files which need to use the
|
|
|
|
.Fn MALLOC_DECLARE
|
|
|
|
macro.
|
|
|
|
.Pp
|
|
|
|
The
|
|
|
|
.Fn malloc_type_attach
|
|
|
|
function attaches the malloc type
|
|
|
|
.Fa type
|
|
|
|
to the kernel memory allocator.
|
|
|
|
.Pp
|
|
|
|
The
|
|
|
|
.Fn malloc_type_detach
|
|
|
|
function detaches the malloc type
|
|
|
|
.Fa type
|
|
|
|
previously attached with
|
|
|
|
.Fn malloc_type_attach .
|
|
|
|
.Pp
|
|
|
|
The following generic malloc types are currently defined:
|
1996-06-17 03:20:53 +04:00
|
|
|
.Pp
|
|
|
|
.Bl -tag -offset indent -width XXXXXXXXXXXXXX -compact
|
|
|
|
.It Dv M_DEVBUF
|
|
|
|
Device driver memory.
|
1998-07-30 02:07:14 +04:00
|
|
|
.It Dv M_DMAMAP
|
|
|
|
.Xr bus_dma 9
|
|
|
|
structures.
|
2003-02-01 09:27:23 +03:00
|
|
|
.It Dv M_FREE
|
|
|
|
Should be on free list.
|
|
|
|
.It Dv M_TEMP
|
|
|
|
Misc temporary data buffers.
|
1996-06-17 03:20:53 +04:00
|
|
|
.El
|
|
|
|
.Pp
|
2003-02-01 09:27:23 +03:00
|
|
|
Other malloc types are defined by the corresponding subsystem; see the
|
|
|
|
documentation for that subsystem for information its available malloc
|
|
|
|
types.
|
2020-05-30 20:12:01 +03:00
|
|
|
.Sh NOTES
|
|
|
|
Note that the malloc type argument is actually unused on
|
|
|
|
.Nx ,
|
|
|
|
the argument is only supported for easier source compatibility
|
|
|
|
with
|
|
|
|
.Fx
|
|
|
|
and
|
|
|
|
.Ox .
|
|
|
|
Likewise calls to
|
|
|
|
.Fn MALLOC_DECLARE
|
|
|
|
.Fn MALLOC_DEFINE ,
|
|
|
|
.Fn malloc_type_attach ,
|
|
|
|
and
|
|
|
|
.Fn malloc_type_detach
|
|
|
|
are defined out and have no effect on
|
|
|
|
.Nx .
|
1996-06-17 03:20:53 +04:00
|
|
|
.Sh RETURN VALUES
|
|
|
|
.Fn malloc
|
|
|
|
returns a kernel virtual address that is suitably aligned for storage of
|
|
|
|
any type of object.
|
2001-11-19 02:00:10 +03:00
|
|
|
.Sh SEE ALSO
|
2007-02-17 11:50:04 +03:00
|
|
|
.Xr vmstat 1 ,
|
|
|
|
.Xr memoryallocators 9
|