blob: 5309333b6b2544bdfc542268916af4b9e14023a8 [file] [log] [blame] [view]
# 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