摘要
将页面提供给分页器拥有的 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_READ
和 ZX_RIGHT_WRITE
。
返回值
zx_pager_supply_pages()
在成功时返回 ZX_OK,或者在失败时返回以下某个错误代码。
如果失败,则指定范围的 aux_vmo 可能保持不变,也可能完全停用。如果
aux_vmo 被弃用,则 pager_vmo 中未指定数量的页面将被
填充。
错误
ZX_ERR_BAD_HANDLE
pager、pager_vmo 或 aux_vmo 不是有效的句柄。
ZX_ERR_WRONG_TYPE
pager 不是分页器句柄,pager_vmo 不是 VMO 句柄,或者
aux_vmo 不是 VMO 句柄。
ZX_ERR_INVALID_ARGS
pager_vmo 不是通过 pager、offset、size 创建的 VMO,
或 aux_offset 未对齐页面。
ZX_ERR_ACCESS_DENIED
分页器 没有 ZX_RIGHT_MANAGE_VMO
,或 aux_vmo 不包含
ZX_RIGHT_READ
、ZX_RIGHT_WRITE
或 pager_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_vmo 或 aux_vmo 中指定的范围无效。
ZX_ERR_NO_MEMORY
因内存不足而失败。