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 + size 范围内的 VMO 执行操作。

addresssize 必须完全在此 VMAR 内,并且必须在 zx_vmo_op_range() 之前满足为相应 VMO 操作(如果有)指定的对齐要求。

bufferbuffer_size 当前未使用,必须为空。

支持的操作包括:

ZX_VMAR_OP_COMMIT - 要求该句柄以及用于创建任何受影响映射的 VMO 句柄具有 ZX_RIGHT_WRITE 权限,并且地址范围不得包含任何子 VMAR。操作的语义由 zx_vmo_op_range() ZX_VMO_OP_COMMIT 描述。

ZX_VMO_OP_DECOMMIT - 已废弃。请改用 ZX_VMAR_OP_DECOMMIT

ZX_VMAR_OP_DECOMMIT - 要求该句柄以及用于创建任何受影响映射的 VMO 句柄具有 ZX_RIGHT_WRITE 权限,并且地址范围不得包含任何子 VMAR。操作的语义由 zx_vmo_op_range() ZX_VMO_OP_DECOMMIT 描述。

ZX_VMAR_OP_MAP_RANGE - 为给定范围内提交的页面填充 CPU 页面表(或架构等效项)中的条目。系统不会填充该范围内未提交的页面的条目。跳过该范围内任何页面已存在的条目。

ZX_VMAR_OP_DONT_NEED - 提示指定范围内的页面不再需要,应考虑回收内存。适用于使用 zx_pager_create_vmo() 创建的 VMO 的映射;对于其他 VMO 类型的映射,很容易取得成功。

如需了解详情,请参阅 zx_vmo_op_range() ZX_VMO_OP_DONT_NEED

ZX_VMAR_OP_ALWAYS_NEED - 用于提示指定范围内的页面非常重要,应防止内存回收。适用于使用 zx_pager_create_vmo() 创建的 VMO 的映射;对于其他 VMO 类型的映射,很容易取得成功。

如需了解详情,请参阅 zx_vmo_op_range() ZX_VMO_OP_ALWAYS_NEED

权限

如果 opZX_VMAR_OP_DECOMMIT,则 handle 必须具有 ZX_RIGHT_WRITE

如果 opZX_VMAR_OP_COMMIT,则 handle 必须具有 ZX_RIGHT_WRITE

返回值

zx_vmar_op_range() 会在成功时返回 ZX_OK。如果失败,则返回负的错误值。

错误

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

ZX_ERR_BAD_HANDLE 句柄不是有效的句柄。

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

ZX_ERR_INVALID_ARGS 因以下任一原因而退货:

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

ZX_ERR_NOT_SUPPORTED op 不是 ZX_VMO_OP_DECOMMIT,或者一个或多个映射的 VMO 不支持请求的 op

ZX_ERR_OUT_OF_RANGEaddresssize 指定的范围并不完全位于 handle 指定的虚拟机地址范围内。

ZX_ERR_WRONG_TYPE 句柄不是 VMAR 句柄。

另请参阅