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。如果出现 失败,则返回负的错误值。

错误

已为此 VMO 配置了ZX_ERR_ACCESS_DENIED缓存政策,并且 无法更改,或 handle 缺少 ZX_RIGHT_MAP 右侧。

ZX_ERR_BAD_HANDLE handle 不是有效的句柄。

ZX_ERR_INVALID_ARGS cache_policy 包含上述标志之外的标志 或者 cache_policy 包含无效的缓存政策标志组合。

ZX_ERR_NOT_SUPPORTED 对应的 VMO 句柄不是持有文件 物理内存

ZX_ERR_BAD_STATE 缓存政策无法更改,因为 VMO 目前处于 已映射、包含子项、本身是子项、已固定页面或已提交页面 VMO 当前未缓存。

另请参阅