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 配置了缓存政策,该政策可能无法更改,或者 handle 缺少 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 当前未缓存。

另请参阅