摘要
清空 CPU 数据和/或指令缓存。
声明
#include <zircon/syscalls.h>
zx_status_t zx_cache_flush(const void* addr, size_t size, uint32_t options);
说明
zx_cache_flush()
清空指定缓存中覆盖内存的 CPU 缓存
虚拟地址范围如果该内存范围不可读取,则
线程可能会像读取数据时那样发生故障
options 是以下项的按位或:
ZX_CACHE_FLUSH_DATA
清理(回写)数据缓存,使此 CPU 上之前写入的数据 在主内存中可见
ZX_CACHE_FLUSH_INVALIDATE
(仅在与ZX_CACHE_FLUSH_DATA
结合使用时有效)清理(回写)数据缓存,然后使数据缓存失效, 之前在此 CPU 上写入的内容会在主内存和将来可见 在此 CPU 上进行读取操作会看到主内存的外部更改。
ZX_CACHE_FLUSH_INSN
将指令缓存与数据缓存同步,以便查看之前的写入数据 对指令提取可见如果合并
ZX_CACHE_FLUSH_DATA
,则之前写入的内容将对 以及提取指令
至少 ZX_CACHE_FLUSH_DATA
和 ZX_CACHE_FLUSH_INSN
中的一个
必须包含在 options 中。
权限
TODO(https://fxbug.dev/42107318)
返回值
zx_cache_flush()
在成功时返回 ZX_OK
,或者在失败时返回错误代码。
错误
ZX_ERR_INVALID_ARGS
的 options 无效。