zx_vmo_set_cache_policy

摘要

為 VMO 保留的網頁設定快取政策。

宣告

#include <zircon/syscalls.h>

zx_status_t zx_vmo_set_cache_policy(zx_handle_t handle, uint32_t cache_policy);

說明

zx_vmo_set_cache_policy() 會為虛擬記憶體物件 (VMO) 設定快取政策。通常用於直接指向實體記憶體的 VMO。這類 VMO 通常只會透過匯流排通訊協定介面交給使用者空間,因此這個系統呼叫通常只會由處理裝置記憶體的驅動程式使用。這個呼叫也可以用於一般記憶體支援的 VMO,但有類似的限制和用途。

控點必須具備 ZX_RIGHT_MAP 權限,才能允許這項呼叫。此外,VMO 目前不得由任何程序對應、不得有任何子項、不得為子項,也不得有任何已釘選的頁面。只有在從快取狀態轉換時,才能有已提交的頁面,且這些頁面會經過清除並失效。

要使用的 cache_policy 快取旗標:

  • ZX_CACHE_POLICY_CACHED - 使用硬體快取。在 Aarch64 上,這對應於「Normal Memory」、「Outer Write-back non-transient Read and Write allocate」、「Inner Write-back non-transient Read and Write allocate」記憶體屬性

  • ZX_CACHE_POLICY_UNCACHED - 停用快取。在 Aarch64 中,這對應於 Device-nGnRnE 記憶體屬性。

  • ZX_CACHE_POLICY_UNCACHED_DEVICE - 停用快取,並視為裝置記憶體。這取決於架構,在某些架構上可能等同於 ZX_CACHE_POLICY_UNCACHED。在 Aarch64 上,這對應於 Device-nGnRE 記憶體屬性。

  • ZX_CACHE_POLICY_WRITE_COMBINING - Uncached with write combining. 在 Aarch64 上,這對應於「Normal」記憶體,也就是未快取的記憶體屬性。

權限

handle 必須是 ZX_OBJ_TYPE_VMO 類型,且具有 ZX_RIGHT_MAP

傳回值

zx_vmo_set_cache_policy() 會在成功時傳回 ZX_OK。如果失敗,系統會傳回負數錯誤值。

錯誤

ZX_ERR_ACCESS_DENIED 這個 VMO 已設定快取政策,且可能無法變更,或控制代碼缺少 ZX_RIGHT_MAP 權限。

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

ZX_ERR_INVALID_ARGS cache_policy 包含上述未列出的旗標,或 cache_policy 包含無效的快取政策旗標組合。

ZX_ERR_NOT_SUPPORTED VMO 控制代碼對應的不是保存實體記憶體的控制代碼。

ZX_ERR_BAD_STATE VMO 目前已對應、有子項、本身是子項,或有已釘選的頁面,因此無法變更快取政策。

另請參閱