摘要
为 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 上,这对应于“正常”内存(非缓存内存属性)。
权限
句柄必须是 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 目前已映射、有子级、本身是子级或有固定页面。