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 页面移至 [offset, offset + length) 范围内的 pager_vmo。系统不会替换指定范围内的 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 不是通过 pager 创建的 VMO,或者 offsetsizeaux_offset 未对齐页面。

ZX_ERR_ACCESS_DENIED pager 没有 ZX_RIGHT_MANAGE_VMO,或者 aux_vmo 没有 ZX_RIGHT_READZX_RIGHT_WRITE,或者 pager_vmo 没有 ZX_RIGHT_WRITE

ZX_ERR_BAD_STATE aux_vmo 未处于可提供所需页面的状态,或 pager_vmo 已与 pager 分离。

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

ZX_ERR_OUT_OF_RANGE pager_vmoaux_vmo 中指定的范围无效。

ZX_ERR_NO_MEMORY:因内存不足而失败。

另请参阅