摘要
清空 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
将指令缓存与数据缓存同步,以便指令提取能够看到此 CPU 上的先前写入。如果将其与
ZX_CACHE_FLUSH_DATA
结合使用,则之前的写入内容在主内存和指令提取中均可见。
选项中必须至少包含 ZX_CACHE_FLUSH_DATA
和 ZX_CACHE_FLUSH_INSN
中的一个。
权限
TODO(https://fxbug.dev/42107318)
返回值
zx_cache_flush()
在成功时返回 ZX_OK
,在失败时返回错误代码。
错误
ZX_ERR_INVALID_ARGS
选项无效。