accel/qaic: Add AIC200 support
[drm/drm-misc.git] / Documentation / scheduler / membarrier.rst
blob2387804b1c63312b6e186a61c0e7ac099a4cdd00
1 .. SPDX-License-Identifier: GPL-2.0
3 ========================
4 membarrier() System Call
5 ========================
7 MEMBARRIER_CMD_{PRIVATE,GLOBAL}_EXPEDITED - Architecture requirements
8 =====================================================================
10 Memory barriers before updating rq->curr
11 ----------------------------------------
13 The commands MEMBARRIER_CMD_PRIVATE_EXPEDITED and MEMBARRIER_CMD_GLOBAL_EXPEDITED
14 require each architecture to have a full memory barrier after coming from
15 user-space, before updating rq->curr.  This barrier is implied by the sequence
16 rq_lock(); smp_mb__after_spinlock() in __schedule().  The barrier matches a full
17 barrier in the proximity of the membarrier system call exit, cf.
18 membarrier_{private,global}_expedited().
20 Memory barriers after updating rq->curr
21 ---------------------------------------
23 The commands MEMBARRIER_CMD_PRIVATE_EXPEDITED and MEMBARRIER_CMD_GLOBAL_EXPEDITED
24 require each architecture to have a full memory barrier after updating rq->curr,
25 before returning to user-space.  The schemes providing this barrier on the various
26 architectures are as follows.
28  - alpha, arc, arm, hexagon, mips rely on the full barrier implied by
29    spin_unlock() in finish_lock_switch().
31  - arm64 relies on the full barrier implied by switch_to().
33  - powerpc, riscv, s390, sparc, x86 rely on the full barrier implied by
34    switch_mm(), if mm is not NULL; they rely on the full barrier implied
35    by mmdrop(), otherwise.  On powerpc and riscv, switch_mm() relies on
36    membarrier_arch_switch_mm().
38 The barrier matches a full barrier in the proximity of the membarrier system call
39 entry, cf. membarrier_{private,global}_expedited().