mctl(caddr_t addr, size_t len, int function, void *arg);
Description
mctl
applies a variety of control functions over pages identified by the mappings
established for the address range
[addr, addr + len].
The function to be performed is identified by the argument
function.
Valid functions are defined in
mman.h
as follows.
MC_LOCK
Lock the pages in the range in memory.
This function is used to support
mlock.
See
mlock(3C)
for semantics and usage.
arg
is ignored.
MC_LOCKAS
Lock the pages in the address space in memory.
This function is used to support
mlockall.
See
mlockall(3C)
for semantics and usage.
addr
and
len
are ignored.
arg
is an integer built from the flags:
MCL_CURRENT
Lock current mappings
MCL_FUTURE
Lock future mappings
MC_SYNC
Synchronize the pages in the range with their backing storage.
Optionally invalidate cache copies.
This function is used to support
msync.
See
msync(3C)
for semantics and usage.
arg
is used to represent the
flags
argument to
msync.
It is constructed from an OR of the following values:
MS_SYNC
Synchronized write
MS_ASYNC
Return immediately
MS_INVALIDATE
Invalidate mappings
MS_ASYNC
returns
after all I/O operations are
scheduled.
MS_SYNC
does not return until all I/O operations are complete.
Specify exactly one of
MS_ASYNC
or
MS_SYNC.
MS_INVALIDATE
invalidates all cached copies of data
from memory,
requiring them to be re-obtained from the object's permanent
storage location upon the next reference.
MC_UNLOCK
Unlock the pages in the range.
This function is used to support
munlock.
See
mlock(3C)
for semantics and usage.
arg
is ignored.
MC_UNLOCKAS
Remove address space memory lock, and locks on all current mappings.
This function is used to support
munlockall [see
mlockall(3C)].
addr
and
len
must have the value 0.
arg
is ignored.
Return values
mctl
returns 0 on success, -1 on failure.
mctl
fails if:
EAGAIN
Some or all of the memory identified by the operation
could not be locked due to insufficient system resources.
EBUSY
MS_INVALIDATE
was specified and one or more of the pages is locked in memory.
EFAULT
The page to be locked has been aborted (for example, by a file truncate
operation), or pages following the end of an object are not allocated.
EINVAL
addr
is not a multiple of the page size as returned by
getpagesize.
EINVAL
addr
and/or
len
do not have the value 0 when
MC_LOCKAS
or
MC_UNLOCKAS
are specified.
EINVAL
arg
is not valid for the function specified.
EIO
An I/O error occurred while reading from or writing to the file system.
ENOMEM
Addresses in the range [addr, addr + len] are invalid for the address
space of a process, or specify one or more pages which are not mapped.
EPERM
The process's effective user
ID
is not super-user and one of
MC_LOCK,
MC_LOCKAS,
MC_UNLOCK,
or
MC_UNLOCKAS
was specified.