摘要
為 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 目前已對應、有子項、本身是子項,或有已釘選的頁面,因此無法變更快取政策。