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 上,下列呼叫器系統呼叫會失敗:

核心可在卸離的 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_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。

另請參閱