table of contents
- unstable 4.29.1-1
| PR_RISCV_SET_ICACHE_FLUSH_CTX(2const) | PR_RISCV_SET_ICACHE_FLUSH_CTX(2const) |
BEZEICHNUNG¶
PR_RISCV_SET_ICACHE_FLUSH_CTX - Icache-Rausschreibanweisungen im Anwendungsraum (de)aktivieren
BIBLIOTHEK¶
Standard-C-Bibliothek (libc, -lc)
ÜBERSICHT¶
#include <linux/prctl.h> /* Definition der PR_*-Konstanten */ #include <sys/prctl.h>
int prctl(PR_RISCV_SET_ICACHE_FLUSH_CTX, unsigned long ktx,
unsigned long Bereich);
BESCHREIBUNG¶
Der Kontext und der Bereich kann mit ktx bzw. Bereich angegeben werden.
Wird Bereich auf PR_RISCV_SCOPE_PER_PROCESS 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.
Im Thread-bezogenen Kontext (der Bereich ist beispielsweise auf PR_RISCV_SCOPE_PER_THREAD 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.
Auf Kerneln, auf denen kein SMP konfiguriert ist, ist dieser prctl PR_RISCV_SET_ICACHE_FLUSH_CTX eine Leeroperation, da Migrationen über Harts nicht auftreten werden.
Für ktx können die folgenden Werte angegeben werden:
- PR_RISCV_CTX_SW_FENCEI_ON (seit Linux 6.10)
- Fence.i im Anwendungsraum erlauben.
- PR_RISCV_CTX_SW_FENCEI_OFF (seit Linux 6.10)
- Fence.i im Anwendungsraum verbieten. Alle Threads in einem Prozess werden davon betroffen, wenn der Bereich auf PR_RISCV_SCOPE_PER_PROCESS 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.
Für Bereich können die folgenden Werte angegeben werden:
- PR_RISCV_SCOPE_PER_PROCESS (seit Linux 6.10)
- Stellt sicher, dass der Icache jedes Threads in diesem Prozess zum Anweisungsspeicher bei der Migration kohärent ist.
- PR_RISCV_SCOPE_PER_THREAD (seit Linux 6.10)
- Stellt sicher, dass der Icache des aktuellen Threads bei der Migration kohärent zu dem Anweisungsspeicher ist.
BEISPIELE¶
Bei den folgenden Dateien ist vorgesehen, dass sie miteinander kompiliert und gelinkt werden. Die Funktion modify_instruction() ersetzt eine Addition von Null durch eine Addition mit Eins, was dazu führt, dass sich die Rückgabe der Anweisungssequenz in get_value() von Null auf Eins ändert.
Programmquelle: cmodx.c¶
#include <stdio.h>
#include <sys/prctl.h>
extern int get_value(void);
extern void modify_instruction(void);
int
main(void)
{
int value = get_value();
printf("Wert vor cmodx: %d\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\n", value);
return 0;
}
Programmquelle: cmodx.S¶
.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
Erwartetes Ergebnis¶
Wert vor cmodx: 0 Wert nach cmodx: 1
STANDARDS¶
Linux. Nur RISC-V.
GESCHICHTE¶
SIEHE AUCH¶
ÜBERSETZUNG¶
Die deutsche Übersetzung dieser Handbuchseite wurde von Helge Kreutzmann <debian@helgefjell.de> erstellt.
Diese Übersetzung ist Freie Dokumentation; lesen Sie die GNU General Public License Version 3 oder neuer bezüglich der Copyright-Bedingungen. Es wird KEINE HAFTUNG übernommen.
Wenn Sie Fehler in der Übersetzung dieser Handbuchseite finden, schicken Sie bitte eine E-Mail an die Mailingliste der Übersetzer: debian-l10n-german@lists.debian.org.
| 21. September 2025 | Linux man-pages 6.16 |