zx_vmo_op_range


英文原文快照


名称

vmo_op_range —— 在VMO上指定的范围内执行操作

概要

  1. #include <zircon/syscalls.h>
  2. zx_status_t zx_vmo_op_range(zx_handle_t handle, uint32_t op,
  3. uint64_t offset, uint64_t size,
  4. void* buffer, size_t buffer_size);

描述

vmo_op_range() 的功能是对VMO持有的页面执行缓存和内存操作。

offset是偏移量,指定op操作从VMO持有的内存中开始执行的位置。

size是用于执行操作的范围长度,以字节为单位。

op是请求执行的操作。

bufferbuffer_size目前尚未使用。

ZX_VMO_OP_COMMIT —— 为VMO提交以offset开始的size字节所在的页面。 在VM对象文档中可找到更多信息。 该操作需要ZX_RIGHT_WRITE权限。

ZX_VMO_OP_DECOMMIT —— 释放先前提交给VMO的从offsetoffset + 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_HANDLEhandle是无效句柄。

ZX_ERR_OUT_OF_RANGE:由offsetsize指定了无效的内存范围。

ZX_ERR_NO_MEMORY:为ZX_VMO_OP_COMMIT页面提交操作的内存分配失败。

ZX_ERR_WRONG_TYPEhandle不是VMO类型句柄。

ZX_ERR_ACCESS_DENIEDhandle没有足够的权限来执行操作。

ZX_ERR_INVALID_ARGS:下列情况之一,out是无效指针;op是无效操作;或size为零且op是高速缓存操作。

ZX_ERR_NOT_SUPPORTEDopZX_VMO_OP_LOCKZX_VMO_OP_UNLOCK;或opZX_VMO_OP_DECOMMIT但底层的VMO不允许解除页面提交。

另见

vmo_create, vmo_clone, vmo_read, vmo_write, vmo_get_size, vmo_set_size, vmo_op_range.