摘要
將 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。