摘要
針對 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 上對應的是一般記憶體、外部寫入非暫時性讀取和寫入分配、內部寫入非暫時性讀取和寫入分配的記憶體屬性ZX_CACHE_POLICY_UNCACHED
- 停用快取功能。在 Aarch64 上,這對應於 Device-nGnRnE 記憶體屬性。ZX_CACHE_POLICY_UNCACHED_DEVICE
- 停用快取並視為裝置記憶體。這取決於架構,而且在某些架構上可能相當於ZX_CACHE_POLICY_UNCACHED
。在 Aarch64 上,這會對應至 Device-nGnRE 記憶體屬性。ZX_CACHE_POLICY_WRITE_COMBINING
- 使用寫入合併功能未快取。在 Aarch64 中,這對應到一般記憶體、未快取的記憶體屬性。
權限
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 目前已對應、具有子項、本身為子項、已固定頁面或已確認的頁面,而且目前並未快取 VMO。