.\" -*- coding: UTF-8 -*- .\" Copyright 2024, Rivos, Inc. .\" Copyright, the authors of the Linux man-pages project .\" .\" SPDX-License-Identifier: Linux-man-pages-copyleft .\" .\"******************************************************************* .\" .\" This file was generated with po4a. Translate the source file. .\" .\"******************************************************************* .TH PR_RISCV_SET_ICACHE_FLUSH_CTX 2const "8. Februar 2026" "Linux man\-pages 6.17" .SH BEZEICHNUNG PR_RISCV_SET_ICACHE_FLUSH_CTX \- (De)aktiviert Icache\-Rausschreibanweisungen im Anwendungsraum .SH BIBLIOTHEK Standard\-C\-Bibliothek (\fIlibc\fP,\ \fI\-lc\fP) .SH ÜBERSICHT .nf \fB#include \fP /* Definition der \fBPR_*\fP\-Konstanten */ \fB#include \fP .P \fBint prctl(PR_RISCV_SET_ICACHE_FLUSH_CTX, unsigned long \fP\fIktx\fP, \fB unsigned long \fP\fIBereich\fP\fB);\fP .fi .SH BESCHREIBUNG Der Kontext und der Bereich kann mit \fIktx\fP bzw. \fIBereich\fP angegeben werden. .P Wird \fIBereich\fP auf \fBPR_RISCV_SCOPE_PER_PROCESS\fP gesetzt, dann ist es allen Threads in dem Prozess erlaubt, Icache\-Rausschreibanweisungen auszugeben. Immer wenn ein Thread im Prozess migriert wird, ist garantiert, dass der entsprechende Icache des Harts mit dem Anweisungsspeicher konsistent ist. Außerhalb der Migration erzwingt dies keine Garantie. Falls ein Thread eine Anweisung verändert, die ein anderer Thread auszuführen versucht, muss der andere Thread weiterhin eine Icache\-Rausschreibanweisung ausgeben, bevor er die Ausführung der möglicherweise veränderten Anweisung versucht. Dies muss durch das Programm im Anwendungsraum ausgeführt werden. .P Im Thread\-bezogenen Kontext (d.h. \fIBereich\fP ist beispielsweise auf \fBPR_RISCV_SCOPE_PER_THREAD\fP gesetzt), ist es nur dem Thread, der diese Funktion aufruft, erlaubt, Icache\-Rausschreibanweisungen auszugeben. Wird der Thread migriert, wird garantiert, dass der entsprechende Icache des Harts konsistent mit Anweisungsspeicher ist. .P Auf Kerneln, auf denen kein SMP konfiguriert ist, ist dieser prctl \fBPR_RISCV_SET_ICACHE_FLUSH_CTX\fP eine Leeroperation, da Migrationen über Harts nicht auftreten werden. .P Für \fIktx\fP können die folgenden Werte angegeben werden: .TP \fBPR_RISCV_CTX_SW_FENCEI_ON\fP (seit Linux 6.10) Fence.i im Anwendungsraum erlauben. .TP \fBPR_RISCV_CTX_SW_FENCEI_OFF\fP (seit Linux 6.10) Fence.i im Anwendungsraum verbieten. Alle Threads in einem Prozess werden davon betroffen, wenn \fIBereich\fP auf \fBPR_RISCV_SCOPE_PER_PROCESS\fP gesetzt ist. Daher müssen Sie Vorsicht walten lassen. Verwenden Sie den Schalter nur, wenn Sie garantieren können, dass kein Thread im Prozess ab diesem Zeitpunkt fence.i ausgeben wird. .P Für \fIBereich\fP können die folgenden Werte angegeben werden: .TP \fBPR_RISCV_SCOPE_PER_PROCESS\fP (seit Linux 6.10) Stellt sicher, dass der Icache jedes Threads in diesem Prozess zum Anweisungsspeicher bei der Migration kohärent ist. .TP \fBPR_RISCV_SCOPE_PER_THREAD\fP (seit Linux 6.10) Stellt sicher, dass der Icache des aktuellen Threads bei der Migration kohärent zu dem Anweisungsspeicher ist. .SH BEISPIELE Bei den folgenden Dateien ist vorgesehen, dass sie miteinander kompiliert und gelinkt werden. Die Funktion \fBmodify_instruction()\fP ersetzt eine Addition von Null durch eine Addition mit Eins, was dazu führt, dass sich die Rückgabe der Anweisungssequenz in \fBget_value()\fP von Null auf Eins ändert. .SS "Programmquelle: \fIcmodx.c\fP" .\" SRC BEGIN (cmodx.c) .EX #include #include \& extern int get_value(void); extern void modify_instruction(void); \& int main(void) { int value = get_value(); \& printf("Wert vor cmodx: %d\[rs]n", value); \& // prctl wird vor erstem fence.i aufgerufen prctl(PR_RISCV_SET_ICACHE_FLUSH_CTX, PR_RISCV_CTX_SW_FENCEI_ON, PR_RISCV_SCOPE_PER_PROCESS); \& modify_instruction(); \& // prctl wird nach abschließendem fence.i im Prozess aufgerufen prctl(PR_RISCV_SET_ICACHE_FLUSH_CTX, PR_RISCV_CTX_SW_FENCEI_OFF, PR_RISCV_SCOPE_PER_PROCESS); \& value = get_value(); printf("Wert nach cmodx: %d\[rs]n", value); return 0; } .EE .\" SRC END .SS "Programmquelle: \fIcmodx.S\fP" .EX \&.option norvc \& \&.text \&.global modify_instruction modify_instruction: lw a0, new_insn lui a5,%hi(old_insn) sw a0,%lo(old_insn)(a5) fence.i ret \& \&.section modifiable, "awx" \&.global get_value get_value: li a0, 0 old_insn: addi a0, a0, 0 ret \& \&.data new_insn: addi a0, a0, 1 .EE .SS "Erwartetes Ergebnis" .EX Wert vor cmodx: 0 Wert nach cmodx: 1 .EE .SH STANDARDS Linux. Nur RISC\-V. .SH GESCHICHTE .TP Linux 6.10 (RISC\-V). .SH "SIEHE AUCH" \fBprctl\fP(2) .PP .SH ÜBERSETZUNG Die deutsche Übersetzung dieser Handbuchseite wurde von Helge Kreutzmann erstellt. .PP Diese Übersetzung ist Freie Dokumentation; lesen Sie die .UR https://www.gnu.org/licenses/gpl-3.0.html GNU General Public License Version 3 .UE oder neuer bezüglich der Copyright-Bedingungen. Es wird KEINE HAFTUNG übernommen. .PP Wenn Sie Fehler in der Übersetzung dieser Handbuchseite finden, schicken Sie bitte eine E-Mail an die Mailingliste der Übersetzer: .MT debian-l10n-german@lists.debian.org .ME .