Perform an operation on VMOs mapped into this VMAR.
#include <zircon/syscalls.h> zx_status_t zx_vmar_op_range(zx_handle_t handle, uint32_t op, zx_vaddr_t address, size_t size, void* buffer, size_t buffer_size);
zx_vmo_op_range() performs operation op on VMOs mapped in the range address to address+size.
address and size must fall entirely within this VMAR, and must meet the alignment requirements specified for op by
buffer and buffer_size are currently unused, and must be empty
The supported operations are:
ZX_VMO_OP_DECOMMIT - Deprecated. Use ZX_VMAR_OP_DECOMMIT instead. ZX_VMAR_OP_DECOMMIT - Requires the ZX_RIGHT_WRITE right, and applies only to writable mappings. ZX_VMAR_OP_MAP_RANGE - Populates entries in the CPU page tables (or architectural equivalent) for committed pages in the given range. Entries for uncommitted pages in the range are not populated. Fails if entries already exist for any page in the range (this may change in the future).
The operation's semantics are otherwise as described by
If op is ZX_VMO_OP_DECOMMIT, affected mappings must be writable.
zx_vmar_op_range() returns ZX_OK on success. In the event of failure, a negative error value is returned.
ZX_ERR_ACCESS_DENIED handle, or one of the affected VMO mappings, does not have sufficient rights to perform the operation.
ZX_ERR_BAD_HANDLE handle is not a valid handle.
ZX_ERR_BAD_STATE handle is not a live VMAR, or the range specified by address and size spans un-mapped pages.
ZX_ERR_INVALID_ARGS buffer is non-null, or buffer_size is non-zero, op is not a valid operation, size is zero, or address was not page-aligned.
ZX_ERR_NOT_SUPPORTED op was not ZX_VMO_OP_DECOMMIT, or one or more mapped VMOs do not support the requested op.
ZX_ERR_OUT_OF_RANGE The range specified by address and size is not wholy within the VM address range specified by handle.
ZX_ERR_WRONG_TYPE handle is not a VMAR handle.