# zx_cache_flush

## NAME

<!-- Updated by update-docs-from-fidl, do not edit. -->

Flush CPU data and/or instruction caches.

## SYNOPSIS

<!-- Updated by update-docs-from-fidl, do not edit. -->

```c
#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-fidl, 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.
