zx_cache_flush

摘要

清空 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_DATAZX_CACHE_FLUSH_INSN 中的一个。

权限

TODO(https://fxbug.dev/42107318)

返回值

zx_cache_flush() 在成功时返回 ZX_OK,在失败时返回错误代码。

错误

ZX_ERR_INVALID_ARGS 选项无效。