摘要
將頁面提供給呼叫器擁有的 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_vmo 網頁的範圍從 [aux_offset、aux_offset + length) 移至 pager_vmo 範圍 [offset、offset + length)。在指定範圍內的任何 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
pager 沒有 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 已從 pager 卸離。
ZX_ERR_NOT_SUPPORTED
aux_vmo 是實體、連續或分頁式支援的 VMO。
ZX_ERR_OUT_OF_RANGE
在 pager_vmo 或 aux_vmo 中指定的範圍無效。
ZX_ERR_NO_MEMORY
因記憶體不足而失敗。