摘要
將 VMO 從呼叫器卸離。
宣告
#include <zircon/syscalls.h>
zx_status_t zx_pager_detach_vmo(zx_handle_t pager, zx_handle_t pager_vmo);
說明
將 pager_vmo 從 pager 卸離,會導致核心停止將頁面要求排入 VMO。 之後存取會產生網頁要求的後續存取作業會失敗。
卸離後,系統就不會產生新的 ZX_PAGER_VMO_READ
和 ZX_PAGER_VMO_DIRTY
要求。
但部分要求可能仍在傳輸中。呼叫器服務可以略過這些要求,因為
系統會繼續執行核心,並錯誤產生這些要求的執行緒。呼叫器的最終要求
服務會收到 ZX_PAGER_VMO_COMPLETE
要求。
在卸離的 VMO 上,下列呼叫器 Sys 呼叫將會失敗:
zx_pager_supply_pages()
zx_pager_op_range()
與ZX_PAGER_OP_DIRTY
和ZX_PAGER_OP_FAIL
合作 此外,下列項目在卸離前會繼續運作:zx_pager_query_dirty_ranges()
zx_pager_query_vmo_stats()
zx_pager_op_range()
與ZX_PAGER_OP_WRITEBACK_BEGIN
和ZX_PAGER_OP_WRITEBACK_END
合作
這個核心可以從卸離的 VMO 中清除乾淨頁面,但會保留所有骯髒頁面。發生
接收 ZX_PAGER_VMO_COMPLETE
要求,呼叫器服務應查詢這些範圍
使用 zx_pager_query_dirty_ranges()
,並在回覆時使用 zx_pager_op_range()
回信
ZX_PAGER_OP_WRITEBACK_BEGIN
和 ZX_PAGER_OP_WRITEBACK_END
。寫完後
這些頁面將再次清除乾淨,因此核心可以自由剔除。
權限
pager 必須是 ZX_OBJ_TYPE_PAGER
類型,且包含 ZX_RIGHT_ATTACH_VMO
和
ZX_RIGHT_MANAGE_VMO
。
pager_vmo 必須是 ZX_OBJ_TYPE_VMO
類型,且包含 ZX_RIGHT_WRITE
。
傳回值
zx_pager_detach_vmo()
會在成功時傳回 ZX_OK,否則會在失敗時傳回下列其中一個錯誤代碼。
錯誤
ZX_ERR_BAD_HANDLE
pager 或 pager_vmo 不是有效的帳號代碼。
ZX_ERR_WRONG_TYPE
pager 不是 Pager 處理常式,或 pager_vmo 不是 VMO 控制代碼。
ZX_ERR_ACCESS_DENIED
Pager 缺少 ZX_RIGHT_ATTACH_VMO
或 ZX_RIGHT_MANAGE_VMO
,
或 pager_vmo 沒有 ZX_RIGHT_WRITE
。
ZX_ERR_INVALID_ARGS
pager_vmo 不是透過 pager 建立的 VMO。