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_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_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 並非透過 pageroffsetsizeaux_offset 建立的 VMO 未對齊頁面。

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 因記憶體不足而失敗。

另請參閱