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 上對應的是一般記憶體、外部寫入非暫時性讀取和寫入分配、內部寫入非暫時性讀取和寫入分配的記憶體屬性

  • 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。

另請參閱