zx_pager_脫離_vmo

摘要

將 VMO 從呼叫器卸離。

宣告

#include <zircon/syscalls.h>

zx_status_t zx_pager_detach_vmo(zx_handle_t pager, zx_handle_t pager_vmo);

說明

pager_vmopager 卸離,會導致核心停止將頁面要求排入 VMO。 之後存取會產生網頁要求的後續存取作業會失敗。

卸離後,系統就不會產生新的 ZX_PAGER_VMO_READZX_PAGER_VMO_DIRTY 要求。 但部分要求可能仍在傳輸中。呼叫器服務可以略過這些要求,因為 系統會繼續執行核心,並錯誤產生這些要求的執行緒。呼叫器的最終要求 服務會收到 ZX_PAGER_VMO_COMPLETE 要求。

在卸離的 VMO 上,下列呼叫器 Sys 呼叫將會失敗:

這個核心可以從卸離的 VMO 中清除乾淨頁面,但會保留所有骯髒頁面。發生 接收 ZX_PAGER_VMO_COMPLETE 要求,呼叫器服務應查詢這些範圍 使用 zx_pager_query_dirty_ranges(),並在回覆時使用 zx_pager_op_range() 回信 ZX_PAGER_OP_WRITEBACK_BEGINZX_PAGER_OP_WRITEBACK_END。寫完後 這些頁面將再次清除乾淨,因此核心可以自由剔除。

權限

pager 必須是 ZX_OBJ_TYPE_PAGER 類型,且包含 ZX_RIGHT_ATTACH_VMOZX_RIGHT_MANAGE_VMO

pager_vmo 必須是 ZX_OBJ_TYPE_VMO 類型,且包含 ZX_RIGHT_WRITE

傳回值

zx_pager_detach_vmo() 會在成功時傳回 ZX_OK,否則會在失敗時傳回下列其中一個錯誤代碼。

錯誤

ZX_ERR_BAD_HANDLE pagerpager_vmo 不是有效的帳號代碼。

ZX_ERR_WRONG_TYPE pager 不是 Pager 處理常式,或 pager_vmo 不是 VMO 控制代碼。

ZX_ERR_ACCESS_DENIED Pager 缺少 ZX_RIGHT_ATTACH_VMOZX_RIGHT_MANAGE_VMO, 或 pager_vmo 沒有 ZX_RIGHT_WRITE

ZX_ERR_INVALID_ARGS pager_vmo 不是透過 pager 建立的 VMO。

另請參閱