kmem_alloc(D3) kmem_alloc(D3)
NAME
kmem_alloc - allocate space from kernel free memory
SYNOPSIS
#include <sys/types.h>
#include <sys/kmem.h>
#include <sys/ddi.h>
void *kmem_alloc(size_t size, int flag);
Arguments
size Number of bytes to allocate.
flag Specifies whether the caller is willing to sleep
waiting for memory.
DESCRIPTION
kmem_alloc allocates size bytes of kernel memory and returns a
pointer to the allocated memory. If flag is set to KM_SLEEP,
the caller will sleep if necessary until the specified amount
of memory is available. If flag is set to KM_NOSLEEP, the
caller will not sleep, but kmem_alloc will return NULL if the
specified amount of memory is not immediately available.
Return Values
Upon successful completion, kmem_alloc returns a pointer to
the allocated memory. If KM_NOSLEEP is specified and
sufficient memory is not immediately available, kmem_alloc
returns a NULL pointer. If size is set to 0, kmem_alloc
returns NULL regardless of the value of flag.
USAGE
Kernel memory is a limited resource and should be used
judiciously. Memory allocated using kmem_alloc should be
freed as soon as possible. Drivers should not use local
freelists for memory or similar schemes that cause the memory
to be held for longer than necessary.
Since holding memory allocated using kmem_alloc for extended
periods of time (for example, allocating memory at system
startup and never freeing it) can have an adverse effect on
overall memory usage and system performance, memory needed for
such extended periods should be statically allocated whenever
possible.
Copyright 1994 Novell, Inc. Page 1
kmem_alloc(D3) kmem_alloc(D3)
The address returned by a successful call to kmem_alloc is
word-aligned.
Warnings
Drivers should not assume that memory allocated by kmem_alloc
is usable for DMA operations, nor should drivers assume that
the memory has any specific physical properties such as
starting address alignment, physical address range, or
physical contiguity. Beginning with ddi version 6, memory
with specific physical properties can be obtained through
kmem_alloc_physreq(D3), or kmem_zalloc_physreq(D3). In ddi
version 5, contiguous memory with specific physical properties
can be obtained through kmem_alloc_physcontig(D3).
Level
Initialization or Base if flag is set to KM_SLEEP.
Initialization, Base or Interrupt if flag is set to
KM_NOSLEEP.
Synchronization Constraints
May sleep if flag is set to KM_SLEEP. If KM_SLEEP is used
during Initialization before the system is fully running and
no memory is available, kmem_alloc may generate a panic rather
than futilely waiting forever.
Driver-defined basic locks and read/write locks may be held
across calls to this function if flag is KM_NOSLEEP, but may
not be held if flag is KM_SLEEP.
Driver-defined sleep locks may be held across calls to this
function regardless of the value of flag.
REFERENCES
kmem_alloc_physcontig(D3), kmem_alloc_physreq(D3),
kmem_free(D3), kmem_free_physcontig(D3), kmem_zalloc(D3),
kmem_zalloc_physreq(D3), ptob(D3), physreq(D4)
NOTICES
Portability
All processors
Applicability
ddi: 1, 2, 3, 4, 5, 5mp, 6, 6mp, 7, 7mp
Copyright 1994 Novell, Inc. Page 2
kmem_alloc(D3) kmem_alloc(D3)
In versions 1, 2, 3, 4, 5, and 5mp, the memory returned by
kmem_alloc will be DMA-able; that is, it will satisfy worst-
case DMA-ability requirements on systems with restricted DMA;
see phys_dmasize of physreq(D4). In versions 1, 2, 3, and 4,
the memory returned will also be physically contiguous, if
possible (guaranteed if size is less than or equal to
ptob(1)). For other versions, there are no guarantees on the
memory properties.
Copyright 1994 Novell, Inc. Page 3