zx_pager_supply_pages

摘要

将页面提供给分页器拥有的 VMO。

声明

#include <zircon/syscalls.h>

zx_status_t zx_pager_supply_pages(zx_handle_t pager,
                                  zx_handle_t pager_vmo,
                                  uint64_t offset,
                                  uint64_t length,
                                  zx_handle_t aux_vmo,
                                  uint64_t aux_offset);

说明

将 [aux_offset, aux_offset + length) 范围内 aux_vmo 的页面移至以下位置的 pager_vmo: 范围 [offset, 偏移 + 长度])。pager_vmo 中指定范围内的所有网页都不会 被替换;而是释放 aux_vmo 中的相应页面。aux_vmo 不能是 物理、连续或分页器支持,并且不得在指定范围内固定页面。不限 aux_vmo 中未提交的页面将导致零个页面或等效页面插入到 pager_vmo 中。 完成此操作后,aux_vmo 的指定区域将完全停用。

权限

pager 的类型必须为 ZX_OBJ_TYPE_PAGER 且包含 ZX_RIGHT_MANAGE_VMO

pager_vmo 的类型必须为 ZX_OBJ_TYPE_VMO 且包含 ZX_RIGHT_WRITE

aux_vmo 的类型必须为 ZX_OBJ_TYPE_VMO,并且具有 ZX_RIGHT_READZX_RIGHT_WRITE

返回值

zx_pager_supply_pages() 在成功时返回 ZX_OK,或者在失败时返回以下某个错误代码。 如果失败,则指定范围的 aux_vmo 可能保持不变,也可能完全停用。如果 aux_vmo 被弃用,则 pager_vmo 中未指定数量的页面将被 填充。

错误

ZX_ERR_BAD_HANDLE pagerpager_vmoaux_vmo 不是有效的句柄。

ZX_ERR_WRONG_TYPE pager 不是分页器句柄,pager_vmo 不是 VMO 句柄,或者 aux_vmo 不是 VMO 句柄。

ZX_ERR_INVALID_ARGS pager_vmo 不是通过 pageroffsetsize 创建的 VMO, 或 aux_offset 未对齐页面。

ZX_ERR_ACCESS_DENIED 分页器 没有 ZX_RIGHT_MANAGE_VMO,或 aux_vmo 不包含 ZX_RIGHT_READZX_RIGHT_WRITEpager_vmo 不含 ZX_RIGHT_WRITE

ZX_ERR_BAD_STATE aux_vmo 不在能够提供所需页面的状态,或者 pager_vmo 已与分页器分离。

ZX_ERR_NOT_SUPPORTED aux_vmo 是一个物理、连续或由分页器支持的 VMO。

ZX_ERR_OUT_OF_RANGE pager_vmoaux_vmo 中指定的范围无效。

ZX_ERR_NO_MEMORY 因内存不足而失败。

另请参阅