摘要
將頁面提供至呼叫頁面自有的 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) 的頁面移至 [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 或 aux_offset 建立的 VMO 未對齊頁面。
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
因記憶體不足而失敗。