1 .. SPDX-License-Identifier: GPL-2.0 1 .. SPDX-License-Identifier: GPL-2.0 2 2 3 ======================== 3 ======================== 4 membarrier() System Call 4 membarrier() System Call 5 ======================== 5 ======================== 6 6 7 MEMBARRIER_CMD_{PRIVATE,GLOBAL}_EXPEDITED - Ar 7 MEMBARRIER_CMD_{PRIVATE,GLOBAL}_EXPEDITED - Architecture requirements 8 ============================================== 8 ===================================================================== 9 9 10 Memory barriers before updating rq->curr 10 Memory barriers before updating rq->curr 11 ---------------------------------------- 11 ---------------------------------------- 12 12 13 The commands MEMBARRIER_CMD_PRIVATE_EXPEDITED 13 The commands MEMBARRIER_CMD_PRIVATE_EXPEDITED and MEMBARRIER_CMD_GLOBAL_EXPEDITED 14 require each architecture to have a full memor 14 require each architecture to have a full memory barrier after coming from 15 user-space, before updating rq->curr. This ba 15 user-space, before updating rq->curr. This barrier is implied by the sequence 16 rq_lock(); smp_mb__after_spinlock() in __sched 16 rq_lock(); smp_mb__after_spinlock() in __schedule(). The barrier matches a full 17 barrier in the proximity of the membarrier sys 17 barrier in the proximity of the membarrier system call exit, cf. 18 membarrier_{private,global}_expedited(). 18 membarrier_{private,global}_expedited(). 19 19 20 Memory barriers after updating rq->curr 20 Memory barriers after updating rq->curr 21 --------------------------------------- 21 --------------------------------------- 22 22 23 The commands MEMBARRIER_CMD_PRIVATE_EXPEDITED 23 The commands MEMBARRIER_CMD_PRIVATE_EXPEDITED and MEMBARRIER_CMD_GLOBAL_EXPEDITED 24 require each architecture to have a full memor 24 require each architecture to have a full memory barrier after updating rq->curr, 25 before returning to user-space. The schemes p 25 before returning to user-space. The schemes providing this barrier on the various 26 architectures are as follows. 26 architectures are as follows. 27 27 28 - alpha, arc, arm, hexagon, mips rely on the 28 - alpha, arc, arm, hexagon, mips rely on the full barrier implied by 29 spin_unlock() in finish_lock_switch(). 29 spin_unlock() in finish_lock_switch(). 30 30 31 - arm64 relies on the full barrier implied by 31 - arm64 relies on the full barrier implied by switch_to(). 32 32 33 - powerpc, riscv, s390, sparc, x86 rely on th 33 - powerpc, riscv, s390, sparc, x86 rely on the full barrier implied by 34 switch_mm(), if mm is not NULL; they rely o 34 switch_mm(), if mm is not NULL; they rely on the full barrier implied 35 by mmdrop(), otherwise. On powerpc and ris 35 by mmdrop(), otherwise. On powerpc and riscv, switch_mm() relies on 36 membarrier_arch_switch_mm(). 36 membarrier_arch_switch_mm(). 37 37 38 The barrier matches a full barrier in the prox 38 The barrier matches a full barrier in the proximity of the membarrier system call 39 entry, cf. membarrier_{private,global}_expedit 39 entry, cf. membarrier_{private,global}_expedited().
Linux® is a registered trademark of Linus Torvalds in the United States and other countries.
TOMOYO® is a registered trademark of NTT DATA CORPORATION.