zx_vmo_op_range
名称
vmo_op_range —— 在VMO上指定的范围内执行操作
概要
#include <zircon/syscalls.h>
zx_status_t zx_vmo_op_range(zx_handle_t handle, uint32_t op,
uint64_t offset, uint64_t size,
void* buffer, size_t buffer_size);
描述
vmo_op_range() 的功能是对VMO持有的页面执行缓存和内存操作。
offset是偏移量,指定op操作从VMO持有的内存中开始执行的位置。
size是用于执行操作的范围长度,以字节为单位。
op是请求执行的操作。
buffer和buffer_size目前尚未使用。
ZX_VMO_OP_COMMIT —— 为VMO提交以offset开始的size字节所在的页面。 在VM对象文档中可找到更多信息。 该操作需要ZX_RIGHT_WRITE权限。
ZX_VMO_OP_DECOMMIT —— 释放先前提交给VMO的从offset到offset + size范围内的页面。 该操作需要ZX_RIGHT_WRITE权限。
ZX_VMO_OP_LOCK —— 目前尚不支持。
ZX_VMO_OP_UNLOCK —— 目前尚不支持。
ZX_VMO_OP_CACHE_SYNC —— 执行缓存同步操作。 该操作需要ZX_RIGHT_READ权限。
ZX_VMO_OP_CACHE_INVALIDATE —— 执行缓存失效操作。 该操作需要ZX_RIGHT_READ权限。
ZX_VMO_OP_CACHE_CLEAN —— 执行缓存清理操作。 该操作需要ZX_RIGHT_READ权限。
ZX_VMO_OP_CACHE_CLEAN_INVALIDATE —— 同时执行缓存清理和缓存失效操作。 该操作需要ZX_RIGHT_READ权限。
权限
TODO(ZX-2399)
返回值
zx_vmo_write() 调用成功则返回ZX_OK,如果发生错误,则返回负的错误码。
错误码
ZX_ERR_BAD_HANDLE:handle是无效句柄。
ZX_ERR_OUT_OF_RANGE:由offset和size指定了无效的内存范围。
ZX_ERR_NO_MEMORY:为ZX_VMO_OP_COMMIT页面提交操作的内存分配失败。
ZX_ERR_WRONG_TYPE:handle不是VMO类型句柄。
ZX_ERR_ACCESS_DENIED:handle没有足够的权限来执行操作。
ZX_ERR_INVALID_ARGS:下列情况之一,out是无效指针;op是无效操作;或size为零且op是高速缓存操作。
ZX_ERR_NOT_SUPPORTED:op为ZX_VMO_OP_LOCK或ZX_VMO_OP_UNLOCK;或op为ZX_VMO_OP_DECOMMIT但底层的VMO不允许解除页面提交。
另见
vmo_create, vmo_clone, vmo_read, vmo_write, vmo_get_size, vmo_set_size, vmo_op_range.