DDI_UMEM_LOCK(9F) Kernel Functions for Drivers DDI_UMEM_LOCK(9F)
ddi_umem_lock, ddi_umem_unlock - lock and unlock memory pages
#include <sys/sunddi.h> int ddi_umem_lock
, size_t len
, int flags
); void ddi_umem_unlock
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()
function locks down the physical pages (including I/O
pages) that correspond to the current process' virtual address range
) 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
perform I/O (see ddi_umem_iosetup(9F)
it can be used with devmap_umem_setup(9F)
to export the memory to an
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
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)
cookie obtained from ddi_umem_lock()
The process is not allowed to exec(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)
On success, a 0
is returned. Otherwise, one of the following errno
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,
or locking len
memory would exceed a limit or resource control
on locked memory. EAGAIN
Could not allocate system resources required to lock the pages.
could succeed at a later time. EINVAL
Requested memory is not aligned on a system page boundary.
function can only be called from user context; ddi_umem_unlock()
from user, kernel, and interrupt contexts.
SEE ALSO ddi_umem_iosetup(9F)
function consumes physical memory. The driver is
responsible for a speedy unlock to free up the resources.
function can defer unlocking of the pages to a
later time depending on the implementation.
April 10, 2007 DDI_UMEM_LOCK(9F)