Perform an operation on all VMOs mapped into part of a VMAR.


#include <zircon/syscalls.h>

zx_status_t zx_vmar_op_range(zx_handle_t handle,
                             uint32_t op,
                             uint64_t address,
                             uint64_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 VMARR, and must meet the alignment requirements specified for op by zx_vmo_op_range().

buffer and buffer_size are currently unused, and must be empty

The supported operations are:

ZX_VMO_OP_DECOMMIT - Requires the ZX_RIGHT_WRITE right, and applies only to writable mappings.

The operation's semantics are otherwise as described by zx_vmo_op_range().


If op is ZX_VMO_OP_DECOMMIT, handle must be of type ZX_OBJ_TYPE_VMAR and have ZX_RIGHT_WRITE.


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.