| # zx_cache_flush | 
 |  | 
 | ## NAME | 
 |  | 
 | <!-- Updated by update-docs-from-abigen, do not edit. --> | 
 |  | 
 | cache_flush - Flush CPU data and/or instruction caches | 
 |  | 
 | ## SYNOPSIS | 
 |  | 
 | <!-- Updated by update-docs-from-abigen, do not edit. --> | 
 |  | 
 | ``` | 
 | #include <zircon/syscalls.h> | 
 |  | 
 | zx_status_t zx_cache_flush(const void* addr, size_t size, uint32_t options); | 
 | ``` | 
 |  | 
 | ## DESCRIPTION | 
 |  | 
 | `zx_cache_flush()` flushes CPU caches covering memory in the given | 
 | virtual address range.  If that range of memory is not readable, then | 
 | the thread may fault as it would for a data read. | 
 |  | 
 | *options* is a bitwise OR of: | 
 |  | 
 |  * **ZX_CACHE_FLUSH_DATA** | 
 |  | 
 |    Clean (write back) data caches, so previous writes on this CPU are | 
 |    visible in main memory. | 
 |  | 
 |  * **ZX_CACHE_FLUSH_INVALIDATE** | 
 |    (valid only when combined with **ZX_CACHE_FLUSH_DATA**) | 
 |  | 
 |    Clean (write back) data caches and then invalidate data caches, so | 
 |    previous writes on this CPU are visible in main memory and future | 
 |    reads on this CPU see external changes to main memory. | 
 |  | 
 |  * **ZX_CACHE_FLUSH_INSN** | 
 |  | 
 |    Synchronize instruction caches with data caches, so previous writes | 
 |    on this CPU are visible to instruction fetches.  If this is combined | 
 |    with **ZX_CACHE_FLUSH_DATA**, then previous writes will be visible to | 
 |    main memory as well as to instruction fetches. | 
 |  | 
 | At least one of **ZX_CACHE_FLUSH_DATA** and **ZX_CACHE_FLUSH_INSN** | 
 | must be included in *options*. | 
 |  | 
 | ## RIGHTS | 
 |  | 
 | <!-- Updated by update-docs-from-abigen, do not edit. --> | 
 |  | 
 | TODO(ZX-2399) | 
 |  | 
 | ## RETURN VALUE | 
 |  | 
 | `zx_cache_flush()` returns **ZX_OK** on success, or an error code on failure. | 
 |  | 
 | ## ERRORS | 
 |  | 
 | **ZX_ERR_INVALID_ARGS** *options* is invalid. |