Perform an operation on a range of a pager owned vmo.
#include <zircon/syscalls.h> zx_status_t zx_pager_op_range(zx_handle_t pager, uint32_t op, zx_handle_t pager_vmo, uint64_t offset, uint64_t length, uint64_t data);
Performs a pager operation, specified by op on pager_vmo in the range [offset, offset + length). The pager_vmo must have previously been created from the pager by zx_pager_create_vmo()
. offset and length must be page aligned. data is an optional parameter, if the specified op supports one.
Operations that can be performed, i.e. values op can take:
ZX_PAGER_OP_FAIL - The userspace pager failed to fulfill page requests for pager_vmo in the range [offset, offset + length). data contains the error encountered (a zx_status_t
error code sign-extended to a uint64_t
value) - permitted values are ZX_ERR_IO, ZX_ERR_IO_DATA_INTEGRITY and ZX_ERR_BAD_STATE. This will signal threads that might be waiting on page requests in that range, unblocking them. If the blocked thread was requesting pages through a zx_vmo_read()
or a zx_vmo_op_range()
with ZX_VMO_OP_COMMIT, the call will fail and the error status (data) will be returned. If the blocked thread was requesting pages through a VMAR mapping, the thread will take a fatal page fault exception.
pager must be of type ZX_OBJ_TYPE_PAGER.
pager_vmo must be of type ZX_OBJ_TYPE_VMO.
zx_pager_op_range()
returns ZX_OK on success, or one of the following error codes on failure.
ZX_ERR_BAD_HANDLE pager or pager_vmo is not a valid handle.
ZX_ERR_WRONG_TYPE pager is not a pager handle, or pager_vmo is not a vmo handle.
ZX_ERR_INVALID_ARGS pager_vmo is not a vmo created from pager, or offset or length is not page aligned, or op is ZX_PAGER_OP_FAIL and data is not one of ZX_ERR_IO, ZX_ERR_IO_DATA_INTEGRITY or ZX_ERR_BAD_STATE.
ZX_ERR_OUT_OF_RANGE The specified range in pager_vmo is invalid.
ZX_ERR_NOT_SUPPORTED op is not supported on the specified range in pager_vmo.