Scroll to navigation

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:

Fence.i im Anwendungsraum erlauben.
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:

Stellt sicher, dass der Icache jedes Threads in diesem Prozess zum Anweisungsspeicher bei der Migration kohärent ist.
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

prctl(2)

Ü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