ZX_vmar_op_range

摘要

在對應至此 VMAR 的 VMO 上執行作業。

宣告

#include <zircon/syscalls.h>

zx_status_t zx_vmar_op_range(zx_handle_t handle,
                             uint32_t op,
                             zx_vaddr_t address,
                             size_t size,
                             void* buffer,
                             size_t buffer_size);

說明

zx_vmar_op_range() 會在 address 範圍中對應的 VMO 執行作業運算: 「地址」+「尺寸」

addresssize 必須完全落在這個 VMAR 中,且必須符合對齊規定 zx_vmo_op_range() 為相應的 VMO 運算 (如有) 指定。

bufferbuffer_size 目前未使用,且必須留空。

支援的作業如下:

ZX_VMAR_OP_COMMIT - 需要該帳號代碼和 VMO 帳號,才能建立任何受影響的資料 對應,請使用 ZX_RIGHT_WRITE,且位址範圍不得含有任何子項 VMAR。 作業語意 zx_vmo_op_range() ZX_VMO_OP_COMMIT

ZX_VMO_OP_DECOMMIT - 已淘汰。改用 ZX_VMAR_OP_DECOMMIT

ZX_VMAR_OP_PREFETCH - 需要該帳號代碼和 VMO 帳號,才能建立任何受影響的資料 請使用 ZX_RIGHT_READ 對應。作業語意 zx_vmo_op_range() ZX_VMO_OP_PREFETCH

ZX_VMAR_OP_DECOMMIT - 需要該帳號代碼和 VMO 帳號,才能建立任何受影響的資料 對應,請使用 ZX_RIGHT_WRITE,且位址範圍不得含有任何子項 VMAR。 作業語意 zx_vmo_op_range() ZX_VMO_OP_DECOMMIT

ZX_VMAR_OP_MAP_RANGE - 填入 CPU 頁面表格 (或同等架構) 中的項目 適用於指定範圍內的修訂頁面範圍內未修訂頁面的項目不在 。略過範圍內任何頁面已存在的項目。

ZX_VMAR_OP_DONT_NEED:提示指定範圍內的網頁不再需要, 才會視為記憶體回收。適合用於為以下版本建立的 VMO 建立對應: zx_pager_create_vmo();生成式 AI 的 與其他 VMO 類型的對應

詳情請參閱 zx_vmo_op_range() ZX_VMO_OP_DONT_NEED即可瞭解詳情。

ZX_VMAR_OP_ALWAYS_NEED:提示指定範圍內的網頁有重要性, 進而避免記憶體回收適合用於為以下版本建立的 VMO 建立對應: zx_pager_create_vmo();生成式 AI 的 與其他 VMO 類型的對應

詳情請參閱 zx_vmo_op_range() ZX_VMO_OP_ALWAYS_NEED即可瞭解詳情。

權限

如果 opZX_VMAR_OP_DECOMMIT,則 handle 必須包含 ZX_RIGHT_WRITE

如果 opZX_VMAR_OP_COMMIT,則 handle 必須包含 ZX_RIGHT_WRITE

如果 opZX_VMAR_OP_PREFETCH,則 handle 必須包含 ZX_RIGHT_READ

傳回值

zx_vmar_op_range() 會在成功時傳回 ZX_OK。失敗時,錯誤的值為負值 。

錯誤

ZX_ERR_ACCESS_DENIED 帳號代碼沒有適當權限,無法進行要求的變更,或 原始 VMO 控制代碼用於建立其中一個受影響的對應,並沒有 或 VMAR 本身不允許要求的變更。

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

ZX_ERR_BAD_STATE 帳號代碼並非即時的 VMAR,或是 addresssize 指定的範圍 範圍涵蓋未對應的區域

ZX_ERR_INVALID_ARGS 因下列任一原因而退回:

  • buffer 為非空值。
  • buffer_size 不是零。
  • size 為 0。
  • address」未依頁面對齊。
  • op 不是有效的作業。
  • opZX_VMAR_OP_COMMITZX_VMAR_OP_DECOMMIT 其中之一 包含子區域。
  • 要求的範圍與子區域重疊,帳號代碼則沒有 ZX_RIGHT_OP_CHILDREN

ZX_ERR_NOT_SUPPORTED op 不是 ZX_VMO_OP_DECOMMIT,或一或多個對應的 VMO 未 支援要求的作業

ZX_ERR_OUT_OF_RANGE addresssize 指定的範圍在 VM 中並非完全一致 透過 handle 指定的位址範圍。

ZX_ERR_WRONG_TYPE 帳號代碼並非 VMAR 控制代碼。

另請參閱