Movatterモバイル変換


[0]ホーム

URL:


man7.org > Linux >man-pages

Linux/UNIX system programming training


PR_RISCV_SET_ICACHE_FLUSH_CTX(2const) — Linux manual page

NAME |LIBRARY |SYNOPSIS |DESCRIPTION |EXAMPLES |STANDARDS |HISTORY |SEE ALSO |COLOPHON

PR_RISCV_SET...CHE_FLUSH_CTX(2const)PR_RISCV_SET...CHE_FLUSH_CTX(2const)

NAME        top

       PR_RISCV_SET_ICACHE_FLUSH_CTX - Enable/disable icache flushing       instructions in userspace.

LIBRARY        top

       Standard C library (libc,-lc)

SYNOPSIS        top

#include <linux/prctl.h>/* Definition ofPR_*constants */#include <sys/prctl.h>int prctl(PR_RISCV_SET_ICACHE_FLUSH_CTX, unsigned longctx,unsigned longscope);

DESCRIPTION        top

       The context and the scope can be provided usingctx andscope       respectively.       When scope is set toPR_RISCV_SCOPE_PER_PROCESSall threads in the       process are permitted to emit icache flushing instructions.       Whenever any thread in the process is migrated, the corresponding       hart's icache will be guaranteed to be consistent with instruction       storage.  This does not enforce any guarantees outside of       migration.  If a thread modifies an instruction that another       thread may attempt to execute, the other thread must still emit an       icache flushing instruction before attempting to execute the       potentially modified instruction.  This must be performed by the       user-space program.       In per-thread context (eg. scope is set toPR_RISCV_SCOPE_PER_THREAD) only the thread calling this function       is permitted to emit icache flushing instructions.  When the       thread is migrated, the corresponding hart's icache will be       guaranteed to be consistent with instruction storage.       On kernels configured without SMP, this prctlPR_RISCV_SET_ICACHE_FLUSH_CTXis a nop as migrations across harts       will not occur.       The following values forctx can be specified:PR_RISCV_CTX_SW_FENCEI_ON(since Linux 6.10)              Allow fence.i in user space.PR_RISCV_CTX_SW_FENCEI_OFF(since Linux 6.10)              Disallow fence.i in user space.  All threads in a process              will be affected when scope is set toPR_RISCV_SCOPE_PER_PROCESS.  Therefore, caution must be              taken; use this flag only when you can guarantee that no              thread in the process will emit fence.i from this point              onward.       The following values forscope can be specified:PR_RISCV_SCOPE_PER_PROCESS(since Linux 6.10)              Ensure the icache of any thread in this process is coherent              with instruction storage upon migration.PR_RISCV_SCOPE_PER_THREAD(since Linux 6.10)              Ensure the icache of the current thread is coherent with              instruction storage upon migration.

EXAMPLES        top

       The following files are meant to be compiled and linked with each       other.  The modify_instruction() function replaces an add with       zero with an add with one, causing the instruction sequence in       get_value() to change from returning a zero to returning a one.Program source: 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("Value before cmodx: %d\n", value);           // Call prctl before first fence.i is called           prctl(PR_RISCV_SET_ICACHE_FLUSH_CTX, PR_RISCV_CTX_SW_FENCEI_ON,                 PR_RISCV_SCOPE_PER_PROCESS);           modify_instruction();           // Call prctl after final fence.i is called in process           prctl(PR_RISCV_SET_ICACHE_FLUSH_CTX, PR_RISCV_CTX_SW_FENCEI_OFF,                 PR_RISCV_SCOPE_PER_PROCESS);           value = get_value();           printf("Value after cmodx: %d\n", value);           return 0;       }Program source: 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, 1Expected result       Value before cmodx: 0       Value after cmodx: 1

STANDARDS        top

       Linux. RISC-V only.

HISTORY        top

       Linux 6.10 (RISC-V).

SEE ALSO        top

prctl(2)

COLOPHON        top

       This page is part of theman-pages (Linux kernel and C library       user-space interface documentation) project.  Information about       the project can be found at        ⟨https://www.kernel.org/doc/man-pages/⟩.  If you have a bug report       for this manual page, see       ⟨https://git.kernel.org/pub/scm/docs/man-pages/man-pages.git/tree/CONTRIBUTING⟩.       This page was obtained from the tarball man-pages-6.15.tar.gz       fetched from       ⟨https://mirrors.edge.kernel.org/pub/linux/docs/man-pages/⟩ on       2025-08-11.  If you discover any rendering problems in this HTML       version of the page, or you believe there is a better or more up-       to-date source for the page, or you have corrections or       improvements to the information in this COLOPHON (which isnot       part of the original manual page), send a mail to       man-pages@man7.orgLinux man-pages 6.15            2025-0P5R-_1R7ISCV_SET...CHE_FLUSH_CTX(2const)

Pages that refer to this page:prctl(2)



HTML rendering created 2025-09-06 byMichael Kerrisk, author ofThe Linux Programming Interface.

For details of in-depthLinux/UNIX system programming training courses that I teach, lookhere.

Hosting byjambit GmbH.

Cover of TLPI


[8]ページ先頭

©2009-2025 Movatter.jp