mirror of https://github.com/mkerrisk/man-pages
161 lines
4.2 KiB
Groff
161 lines
4.2 KiB
Groff
.\" Written by Ralf Baechle (ralf@waldorf-gmbh.de),
|
|
.\" Copyright (c) 1994, 1995 Waldorf GMBH
|
|
.\"
|
|
.\" %%%LICENSE_START(GPLv2+_DOC_FULL)
|
|
.\" This is free documentation; you can redistribute it and/or
|
|
.\" modify it under the terms of the GNU General Public License as
|
|
.\" published by the Free Software Foundation; either version 2 of
|
|
.\" the License, or (at your option) any later version.
|
|
.\"
|
|
.\" The GNU General Public License's references to "object code"
|
|
.\" and "executables" are to be interpreted as the output of any
|
|
.\" document formatting or typesetting system, including
|
|
.\" intermediate and printed output.
|
|
.\"
|
|
.\" This manual is distributed in the hope that it will be useful,
|
|
.\" but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
.\" MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
.\" GNU General Public License for more details.
|
|
.\"
|
|
.\" You should have received a copy of the GNU General Public
|
|
.\" License along with this manual; if not, see
|
|
.\" <http://www.gnu.org/licenses/>.
|
|
.\" %%%LICENSE_END
|
|
.\"
|
|
.TH CACHEFLUSH 2 2020-12-21 "Linux" "Linux Programmer's Manual"
|
|
.SH NAME
|
|
cacheflush \- flush contents of instruction and/or data cache
|
|
.SH SYNOPSIS
|
|
.nf
|
|
.B #include <asm/cachectl.h>
|
|
.PP
|
|
.BI "int cacheflush(char *" addr ", int "nbytes ", int "cache );
|
|
.fi
|
|
.PP
|
|
.IR Note :
|
|
On some architectures,
|
|
there is no glibc wrapper for this system call; see NOTES.
|
|
.SH DESCRIPTION
|
|
.BR cacheflush ()
|
|
flushes the contents of the indicated cache(s) for the
|
|
user addresses in the range
|
|
.I addr
|
|
to
|
|
.IR (addr+nbytes-1) .
|
|
.I cache
|
|
may be one of:
|
|
.TP
|
|
.B ICACHE
|
|
Flush the instruction cache.
|
|
.TP
|
|
.B DCACHE
|
|
Write back to memory and invalidate the affected valid cache lines.
|
|
.TP
|
|
.B BCACHE
|
|
Same as
|
|
.BR (ICACHE|DCACHE) .
|
|
.SH RETURN VALUE
|
|
.BR cacheflush ()
|
|
returns 0 on success.
|
|
On error, it returns \-1 and sets
|
|
.I errno
|
|
to indicate the error.
|
|
.SH ERRORS
|
|
.TP
|
|
.B EFAULT
|
|
Some or all of the address range
|
|
.I addr
|
|
to
|
|
.I (addr+nbytes-1)
|
|
is not accessible.
|
|
.TP
|
|
.B EINVAL
|
|
.I cache
|
|
is not one of
|
|
.BR ICACHE ,
|
|
.BR DCACHE ,
|
|
or
|
|
.BR BCACHE
|
|
(but see BUGS).
|
|
.SH CONFORMING TO
|
|
Historically, this system call was available on all MIPS UNIX variants
|
|
including RISC/os, IRIX, Ultrix, NetBSD, OpenBSD, and FreeBSD
|
|
(and also on some non-UNIX MIPS operating systems), so that
|
|
the existence of this call in MIPS operating systems is a de-facto
|
|
standard.
|
|
.SS Caveat
|
|
.BR 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
|
|
.BR cacheflush ()
|
|
system call on some other architectures, but with different arguments.
|
|
.SH NOTES
|
|
.SS 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.
|
|
.PP
|
|
On some other architectures,
|
|
Linux provides this system call, with different arguments:
|
|
.TP
|
|
M68K:
|
|
.nf
|
|
.BI "int cacheflush(unsigned long " addr ", int " scope ", int " cache ,
|
|
.BI " unsigned long " len );
|
|
.fi
|
|
.TP
|
|
SH:
|
|
.nf
|
|
.BI "int cacheflush(unsigned long " addr ", unsigned long " len ", int " op );
|
|
.fi
|
|
.TP
|
|
NDS32:
|
|
.nf
|
|
.BI "int cacheflush(unsigned int " start ", unsigned int " end ", int " cache );
|
|
.fi
|
|
.PP
|
|
On the above architectures,
|
|
glibc does not provide a wrapper for this system call; call it using
|
|
.BR syscall (2).
|
|
.SS GCC alternative
|
|
Unless you need the finer grained control that this system call provides,
|
|
you probably want to use the GCC built-in function
|
|
.BR __builtin___clear_cache (),
|
|
which provides a portable interface
|
|
across platforms supported by GCC and compatible compilers:
|
|
.PP
|
|
.in +4n
|
|
.EX
|
|
.BI "void __builtin___clear_cache(void *" begin ", void *" end );
|
|
.EE
|
|
.in
|
|
.PP
|
|
On platforms that don't require instruction cache flushes,
|
|
.BR __builtin___clear_cache ()
|
|
has no effect.
|
|
.PP
|
|
.IR Note :
|
|
On some GCC-compatible compilers,
|
|
the prototype for this built-in function uses
|
|
.I char *
|
|
instead of
|
|
.I void *
|
|
for the parameters.
|
|
.SH BUGS
|
|
Linux kernels older than version 2.6.11 ignore the
|
|
.I addr
|
|
and
|
|
.I nbytes
|
|
arguments, making this function fairly expensive.
|
|
Therefore, the whole cache is always flushed.
|
|
.PP
|
|
This function always behaves as if
|
|
.BR BCACHE
|
|
has been passed for the
|
|
.I cache
|
|
argument and does not do any error checking on the
|
|
.I cache
|
|
argument.
|