zx_vmar_op_range

摘要

对映射到此 VMAR 的 VMO 执行操作。

声明

#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_vmar_op_range() 对范围 address 中映射到的 VMO 执行操作 op 地址 + 大小

地址大小必须完全符合此 VMAR 的要求,并且必须满足对齐要求 zx_vmo_op_range() 为相应 VMO 操作(如果有)指定的值。

bufferbuffer_size 目前尚未使用,必须为空。

支持的操作包括:

ZX_VMAR_OP_COMMIT - 需要该 handle,以及用于创建任何受影响的 VMO 句柄的 VMO 句柄 映射,拥有 ZX_RIGHT_WRITE 权限,并且地址范围不得包含任何子 VMAR。 运算的语义如以下所述 zx_vmo_op_range() ZX_VMO_OP_COMMIT

ZX_VMO_OP_DECOMMIT - 已弃用。请改用 ZX_VMAR_OP_DECOMMIT

ZX_VMAR_OP_PREFETCH - 需要该 handle,以及用于创建任何受影响的 VMO 句柄的 VMO 句柄 具有 ZX_RIGHT_READ。运算的语义如以下所述 zx_vmo_op_range() ZX_VMO_OP_PREFETCH

ZX_VMAR_OP_DECOMMIT - 需要该 handle,以及用于创建任何受影响的 VMO 句柄的 VMO 句柄 映射,拥有 ZX_RIGHT_WRITE 权限,并且地址范围不得包含任何子 VMAR。 运算的语义如以下所述 zx_vmo_op_range() ZX_VMO_OP_DECOMMIT

ZX_VMAR_OP_MAP_RANGE - 填充 CPU 页面表中的条目(或等效架构) 指定范围内已提交的页面。范围内未提交页面的条目不包含在内 填充。跳过范围内任何页面已存在的条目。

ZX_VMAR_OP_DONT_NEED - 提示不再需要指定范围内的页面,也应该不再需要这些页面 进行内存回收的考虑因素适用于使用如下方式创建的 VMO 的映射: zx_pager_create_vmo();几乎成功 其他 VMO 类型的映射。

请参阅 zx_vmo_op_range() ZX_VMO_OP_DONT_NEED了解详情。

ZX_VMAR_OP_ALWAYS_NEED - 提示指定范围内的网页非常重要,应该 避免内存回收适用于使用如下方式创建的 VMO 的映射: zx_pager_create_vmo();几乎成功 其他 VMO 类型的映射。

请参阅 zx_vmo_op_range() ZX_VMO_OP_ALWAYS_NEED了解详情。

权限

如果 opZX_VMAR_OP_DECOMMIThandle 必须具有 ZX_RIGHT_WRITE

如果 opZX_VMAR_OP_COMMIThandle 必须具有 ZX_RIGHT_WRITE

如果 opZX_VMAR_OP_PREFETCHhandle 必须具有 ZX_RIGHT_READ

返回值

如果成功,zx_vmar_op_range() 会返回 ZX_OK。如果失败,错误值为负值 。

错误

ZX_ERR_ACCESS_DENIED handle 不具备适当的权限,无法执行所请求的更改,或 用于创建其中一个受影响映射的原始 VMO 句柄没有 或 VMAR 本身不允许所请求的更改。

ZX_ERR_BAD_HANDLE handle 不是有效的句柄。

ZX_ERR_BAD_STATE handle 不是实时 VMAR,或 addresssize 指定的范围 跨越未映射的区域。

ZX_ERR_INVALID_ARGS 因以下任一原因而被退回:

  • buffer 为非 null。
  • buffer_size 为非零值。
  • size 为零。
  • address 未与页面对齐。
  • op 不是有效操作。
  • opZX_VMAR_OP_COMMITZX_VMAR_OP_DECOMMIT 之一,并且为请求的范围 包含次级区域。
  • 请求的范围与子区域重叠,并且 handle 没有 ZX_RIGHT_OP_CHILDREN

ZX_ERR_NOT_SUPPORTED 操作不是 ZX_VMO_OP_DECOMMIT,或一个或多个映射的 VMO 未 支持请求的操作

ZX_ERR_OUT_OF_RANGE addresssize 指定的范围并非完全位于虚拟机内 handle 指定的地址范围。

ZX_ERR_WRONG_TYPE handle 不是 VMAR 句柄。

另请参阅