zx_set_cache_policy


英文原文快照


名称

vmo_set_cache_policy —— 为VMO持有的页面设置缓存策略。

概要

  1. #include <zircon/syscalls.h>
  2. zx_status_t vmo_set_cache_policy(zx_handle_t handle, uint32_t cache_policy);

描述

vmo_set_cache_policy() 的功能是为VMO设置缓存策略,通常用于直接引用物理内存的VMO。 这样的VMO通常只通过总线协议接口传递到用户空间中,因此该系统调用通常仅由处理设备内存的驱动程序使用。 不过它也可以在具有类似限制和用途的,指向常规内存的VMO上使用。

句柄必须具有ZX_RIGHT_MAP权限才可进行此调用。 此外,此调用的VMO目前也不能被任何进程映射、被克隆、成为自身的副本或有任何内存的提交。

cache_policy可使用的缓存标志位:

ZX_CACHE_POLICY_CACHED —— 使用硬件缓存。

ZX_CACHE_POLICY_UNCACHED —— 禁用缓存。

ZX_CACHE_POLICY_UNCACHED_DEVICE —— 禁用缓存并将其视为设备内存。 该标志位的含义取决于体系结构,在某些体系结构上可能等同于ZX_CACHE_POLICY_UNCACHED

ZX_CACHE_POLICY_WRITE_COMBINING —— 使用合并写策略进行缓存提交。

权限

TODO(ZX-2399)

返回值

vmo_set_cache_policy() 调用成功则返回ZX_OK,如果发生错误,则返回负的错误码。

错误码

ZX_ERR_ACCESS_DENIED:之前已为此VMO配置了缓存策略,故可能无法更改,或handle缺少ZX_RIGHT_MAP权限。

ZX_ERR_BAD_HANDLEhandle是无效句柄。

ZX_ERR_INVALID_ARGScache_policy包含上面列出的标志位之外的标志,或cache_policy包含缓存策略标志的无效组合。

ZX_ERR_NOT_SUPPORTED:VMO的句柄handle对应的不是一个持有物理内存的对象。

ZX_ERR_BAD_STATE:无法更改缓存策略,因为VMO目前有下列情况之一:被进程映射;被克隆;成为自身的副本;或有内存的提交。

另见

vmo_create, vmo_read, vmo_write, vmo_get_size, vmo_set_size, vmo_op_range.