cacheflush2
Flush contents of instruction and/or data cache
Usage
#include <sys/cachectl.h>
int cacheflush(int nbytes; void addr[nbytes], int nbytes, int cache);
Note: On some architectures, there is no glibc wrapper for this system call; see VERSIONS.
Library
Standard C library (libc, -lc)
Overview
cacheflush() flushes the contents of the indicated cache(s) for the user addresses in the range addr to (addr+nbytes-1). cache may be one of:
ICACHE
|
Flush the instruction cache. |
|---|---|
DCACHE
|
Write back to memory and invalidate the affected valid cache lines. |
BCACHE
|
Same as (ICACHE|DCACHE). |
Return value
cacheflush() returns 0 on success. On error, it returns -1 and sets errno to indicate the error.
Errors
EFAULT
|
Some or all of the address range addr to (addr+nbytes-1) is not accessible. |
|---|---|
EINVAL
|
cache is not one of ICACHE, DCACHE, or BCACHE (but see BUGS). |
Versions
cacheflush() should not be used in programs intended to be portable. On Linux, this call first appeared on the MIPS architecture, but nowadays, Linux provides a cacheflush() system call on some other architectures, but with different arguments.
Architecture-specific variants
glibc provides a wrapper for this system call, with the prototype shown in SYNOPSIS, for the following architectures: ARC, CSKY, MIPS, and NIOS2.
On some other architectures, Linux provides this system call, with different arguments:
- M68K:
-
int cacheflush(unsigned long addr, int scope, int cache, unsigned long size);
- SH:
-
int cacheflush(unsigned long addr, unsigned long size, int op);
- NDS32:
-
int cacheflush(unsigned int start, unsigned int end, int cache);
On the above architectures, glibc does not provide a wrapper for this system call; call it using syscall(2).
GCC alternative
Unless you need the finer grained control that this system call provides, you probably want to use the GCC built-in function __builtin___clear_cache(), which provides a portable interface across platforms supported by GCC and compatible compilers:
void __builtin___clear_cache(void *begin, void *end);
On platforms that don't require instruction cache flushes, __builtin___clear_cache() has no effect.
Note: On some GCC-compatible compilers, the prototype for this built-in function uses char * instead of void * for the parameters.
Releases
19 releases since Debian 1.1 (Buzz); the text changed 17 times.