ddi_umem_lock(9F)
NAME
ddi_umem_lock, ddi_umem_unlock - lock and unlock memory
pages
SYNOPSIS
#include <sys/ddi.h>
#include <sys/sunddi.h>
int ddi_umem_lock(caddr_t addr, size_t len, int flags,
ddi_umem_cookie_t *cookiep);
void ddi_umem_unlock(ddi_umem_cookie_t cookie);
INTERFACE LEVEL
Solaris DDI specific (Solaris DDI)
PARAMETERS
ddi_umem_lock
addr Virtual address of memory object
len Length of memory object in bytes
flags Valid flags include:
DDI_UMEMLOCK_READ
Memory pages are locked to be read from. (Disk
write or a network send.)
DDI_UMEMLOCK_WRITE
Memory pages are locked to be written to. (Disk
read or a network receive.)
cookiep
Pointer to a kernel memory cookie.
ddi_umem_unlock
cookie
Kernel memory cookie allocated by ddi_umem_lock().
DESCRIPTION
The ddi_umem_lock(9F) function locks down the physical pages
(including I/O pages) that correspond to the current pro-
cess' virtual address range [addr, addr + size) and fills in
a cookie representing the locked pages. This cookie can be
used to create a buf(9S) structure that can be used to per-
form I/O (see ddi_umem_iosetup(9F) and
ddi_dma_buf_bind_handle(9F)), or it can be used with
devmap_umem_setup(9F) to export the memory to an applica-
tion.
The virtual address and length specified must be at a page
boundary and the mapping performed in terms of the system
page size. See pagesize(1).
The flags argument indicates the intended use of the locked
memory. Set flags to DDI_UMEMLOCK_READ if the memory pages
will be read (for example, in a disk write or a network
send.) Set flags to DDI_UMEMLOCK_WRITE if the memory pages
will be written (for example, in a disk read or a network
receive). You must choose one (and only one) of these
values.
To unlock the locked pages, the drivers call
ddi_umem_unlock(9F) with the cookie obtained from
ddi_umem_lock(9F).
The process is not allowed to exec(2) or fork(2) while its
physical pages are locked down by the device driver.
The device driver must ensure that the physical pages have
been unlocked after the application has called close(2).
RETURN VALUES
On success, a 0 is returned. Otherwise, one of the following
errno values is returned.
EFAULT
User process has no mapping at that address range or
does not support locking
EACCES
User process does not have the required permission.
ENOMEM
The system does not have sufficient resources to lock
memory.
EAGAIN
Could not allocate system resources required to lock
the pages. The ddi_umem_lock() could succeed at a
later time.
EINVAL
Requested memory is not aligned on a system page boun-
dary.
CONTEXT
The ddi_umem_lock() function can only be called from user
context; ddi_umem_unlock() from user, kernel, and interrupt
contexts.
SEE ALSO
ddi_umem_iosetup(9F), ddi_dma_buf_bind_handle(9F),
devmap_umem_setup(9F), ddi_umem_alloc(9F)
NOTES
The ddi_umem_lock(9F) function consumes physical memory. The
driver is responsible for a speedy unlock to free up the
resources.
ddi_umem_unlock() can defer unlocking of the pages to a
later time depending on the implementation.
Man(1) output converted with
man2html