| # zx_pager_op_range |
| |
| ## NAME |
| |
| <!-- Updated by update-docs-from-fidl, do not edit. --> |
| |
| Perform an operation on a range of a pager owned vmo. |
| |
| ## SYNOPSIS |
| |
| <!-- Updated by update-docs-from-fidl, do not edit. --> |
| |
| ```c |
| #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); |
| ``` |
| |
| ## DESCRIPTION |
| |
| 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) - 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. |
| |
| ## RIGHTS |
| |
| <!-- Updated by update-docs-from-fidl, do not edit. --> |
| |
| *pager* must be of type **ZX_OBJ_TYPE_PAGER**. |
| |
| *pager_vmo* must be of type **ZX_OBJ_TYPE_VMO**. |
| |
| ## RETURN VALUE |
| |
| `zx_pager_op_range()` returns ZX_OK on success, or one of the following error codes on failure. |
| |
| ## ERRORS |
| |
| **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*. |
| |
| ## SEE ALSO |
| |
| - [`zx_pager_create_vmo()`] |
| - [`zx_pager_detach_vmo()`] |
| - [`zx_pager_supply_pages()`] |
| |
| <!-- References updated by update-docs-from-fidl, do not edit. --> |
| |
| [`zx_pager_create_vmo()`]: pager_create_vmo.md |
| [`zx_pager_detach_vmo()`]: pager_detach_vmo.md |
| [`zx_pager_supply_pages()`]: pager_supply_pages.md |
| [`zx_vmo_op_range()`]: vmo_op_range.md |
| [`zx_vmo_read()`]: vmo_read.md |