[RFC PATCH 10/16] Documentation/membarrier: Update the per-architecture barrier list
Mathieu Desnoyers
mathieu.desnoyers at efficios.com
Fri Nov 13 05:18:57 PST 2026
membarrier.rst lists how each architecture provides the full memory
barrier after the store to rq->curr. The list misses several SMP
architectures.
Add csky, openrisc, sh and xtensa. They use the generic
smp_store_release(). It issues smp_mb() before the store.
finish_task() uses it.
LoongArch and parisc now provide the barrier with
membarrier_arch_switch_mm(). Add them next to powerpc and riscv.
State the rule which both broke: an architecture which weakens
smp_store_release() or spin_unlock() must provide the barrier another
way.
Update the matching comment in __schedule().
Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers at efficios.com>
---
Documentation/scheduler/membarrier.rst | 14 ++++++++++----
kernel/sched/core.c | 10 ++++++----
2 files changed, 16 insertions(+), 8 deletions(-)
diff --git a/Documentation/scheduler/membarrier.rst b/Documentation/scheduler/membarrier.rst
index 2387804b1c63..c5f6f4f57331 100644
--- a/Documentation/scheduler/membarrier.rst
+++ b/Documentation/scheduler/membarrier.rst
@@ -28,12 +28,18 @@ architectures are as follows.
- alpha, arc, arm, hexagon, mips rely on the full barrier implied by
spin_unlock() in finish_lock_switch().
+ - csky, openrisc, sh, xtensa rely on the generic smp_store_release(),
+ which issues a full barrier before the store. finish_task() uses it.
+
- arm64 relies on the full barrier implied by switch_to().
- - powerpc, riscv, s390, sparc, x86 rely on the full barrier implied by
- switch_mm(), if mm is not NULL; they rely on the full barrier implied
- by mmdrop(), otherwise. On powerpc and riscv, switch_mm() relies on
- membarrier_arch_switch_mm().
+ - loongarch, parisc, powerpc, riscv, s390, sparc, x86 rely on the full
+ barrier implied by switch_mm(), if mm is not NULL; they rely on the full
+ barrier implied by mmdrop(), otherwise. On loongarch, parisc, powerpc and
+ riscv, switch_mm() relies on membarrier_arch_switch_mm().
+
+An architecture which overrides smp_store_release() or spin_unlock() with
+something weaker than a full barrier must provide this barrier another way.
The barrier matches a full barrier in the proximity of the membarrier system call
entry, cf. membarrier_{private,global}_expedited().
diff --git a/kernel/sched/core.c b/kernel/sched/core.c
index df6d15cf7109..9985c95ecd73 100644
--- a/kernel/sched/core.c
+++ b/kernel/sched/core.c
@@ -7367,10 +7367,12 @@ static void __sched notrace __schedule(int sched_mode)
* Here are the schemes providing that barrier on the
* various architectures:
* - mm ? switch_mm() : mmdrop() for x86, s390, sparc, PowerPC,
- * RISC-V. switch_mm() relies on membarrier_arch_switch_mm()
- * on PowerPC and on RISC-V.
- * - finish_lock_switch() for weakly-ordered
- * architectures where spin_unlock is a full barrier,
+ * RISC-V, LoongArch, PA-RISC. switch_mm() relies on
+ * membarrier_arch_switch_mm() on PowerPC, RISC-V,
+ * LoongArch and PA-RISC.
+ * - finish_task() and finish_lock_switch() for weakly-ordered
+ * architectures where smp_store_release() or spin_unlock
+ * is a full barrier,
* - switch_to() for arm64 (weakly-ordered, spin_unlock
* is a RELEASE barrier),
*
--
2.47.3
More information about the linux-riscv
mailing list