摘要
在對應至此 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 執行作業運算:
「地址」+「尺寸」。
address 和 size 必須完全落在這個 VMAR 中,且必須符合對齊規定
zx_vmo_op_range()
為相應的 VMO 運算 (如有) 指定。
buffer 和 buffer_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
即可瞭解詳情。
權限
如果 op 為 ZX_VMAR_OP_DECOMMIT
,則 handle 必須包含 ZX_RIGHT_WRITE
。
如果 op 為 ZX_VMAR_OP_COMMIT
,則 handle 必須包含 ZX_RIGHT_WRITE
。
如果 op 為 ZX_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,或是 address 和 size 指定的範圍
範圍涵蓋未對應的區域
ZX_ERR_INVALID_ARGS
因下列任一原因而退回:
- buffer 為非空值。
- buffer_size 不是零。
- size 為 0。
- 「address」未依頁面對齊。
- op 不是有效的作業。
- op 為
ZX_VMAR_OP_COMMIT
或ZX_VMAR_OP_DECOMMIT
其中之一 包含子區域。 - 要求的範圍與子區域重疊,帳號代碼則沒有
ZX_RIGHT_OP_CHILDREN
。
ZX_ERR_NOT_SUPPORTED
op 不是 ZX_VMO_OP_DECOMMIT
,或一或多個對應的 VMO 未
支援要求的作業。
ZX_ERR_OUT_OF_RANGE
address 和 size 指定的範圍在 VM 中並非完全一致
透過 handle 指定的位址範圍。
ZX_ERR_WRONG_TYPE
帳號代碼並非 VMAR 控制代碼。