zx_cache_flush


英文原文快照


名称

zx_cache_flush —— 刷新CPU数据和/或指令缓存

概要

  1. #include <zircon/syscalls.h>
  2. zx_status_t zx_cache_flush(const void* addr, size_t size, uint32_t flags);

描述

zx_cache_flush() 刷新覆盖给定虚拟地址范围内存的CPU缓存。 如果该范围内存不可读,则线程可能会像其他数据读取一样发生故障。

flags是如下的标志位按位取或:

  • 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标志位必须至少有一个包含在flags中。

权限

TODO(ZX-2399)

返回值

zx_cache_flush() 调用成功则返回ZX_OK,失败时返回错误码。

错误码

ZX_ERR_INVALID_ARGSflags无效。