16a546c7eSMathieu Desnoyers#
26a546c7eSMathieu Desnoyers# Feature name:          membarrier-sync-core
36a546c7eSMathieu Desnoyers#         Kconfig:       ARCH_HAS_MEMBARRIER_SYNC_CORE
46a546c7eSMathieu Desnoyers#         description:   arch supports core serializing membarrier
56a546c7eSMathieu Desnoyers#
66a546c7eSMathieu Desnoyers# Architecture requirements
76a546c7eSMathieu Desnoyers#
8*e7615c92SHeiko Carstens# * arm/arm64/powerpc/s390
96a546c7eSMathieu Desnoyers#
10e69244d2SWill Deacon# Rely on implicit context synchronization as a result of exception return
11e69244d2SWill Deacon# when returning from IPI handler, and when returning to user-space.
126a546c7eSMathieu Desnoyers#
136a546c7eSMathieu Desnoyers# * x86
146a546c7eSMathieu Desnoyers#
156a546c7eSMathieu Desnoyers# x86-32 uses IRET as return from interrupt, which takes care of the IPI.
166a546c7eSMathieu Desnoyers# However, it uses both IRET and SYSEXIT to go back to user-space. The IRET
176a546c7eSMathieu Desnoyers# instruction is core serializing, but not SYSEXIT.
186a546c7eSMathieu Desnoyers#
196a546c7eSMathieu Desnoyers# x86-64 uses IRET as return from interrupt, which takes care of the IPI.
206a546c7eSMathieu Desnoyers# However, it can return to user-space through either SYSRETL (compat code),
216a546c7eSMathieu Desnoyers# SYSRETQ, or IRET.
226a546c7eSMathieu Desnoyers#
236a546c7eSMathieu Desnoyers# Given that neither SYSRET{L,Q}, nor SYSEXIT, are core serializing, we rely
246a546c7eSMathieu Desnoyers# instead on write_cr3() performed by switch_mm() to provide core serialization
256a546c7eSMathieu Desnoyers# after changing the current mm, and deal with the special case of kthread ->
266a546c7eSMathieu Desnoyers# uthread (temporarily keeping current mm into active_mm) by issuing a
276a546c7eSMathieu Desnoyers# sync_core_before_usermode() in that specific case.
286a546c7eSMathieu Desnoyers#
296a546c7eSMathieu Desnoyers    -----------------------
306a546c7eSMathieu Desnoyers    |         arch |status|
316a546c7eSMathieu Desnoyers    -----------------------
326a546c7eSMathieu Desnoyers    |       alpha: | TODO |
336a546c7eSMathieu Desnoyers    |         arc: | TODO |
34e69244d2SWill Deacon    |         arm: |  ok  |
356a546c7eSMathieu Desnoyers    |       arm64: |  ok  |
368a5aaf97SGuo Ren    |        csky: | TODO |
376a546c7eSMathieu Desnoyers    |     hexagon: | TODO |
386a546c7eSMathieu Desnoyers    |        ia64: | TODO |
39cc8c418bSTiezhu Yang    |   loongarch: | TODO |
406a546c7eSMathieu Desnoyers    |        m68k: | TODO |
416a546c7eSMathieu Desnoyers    |  microblaze: | TODO |
426a546c7eSMathieu Desnoyers    |        mips: | TODO |
436a546c7eSMathieu Desnoyers    |       nios2: | TODO |
446a546c7eSMathieu Desnoyers    |    openrisc: | TODO |
456a546c7eSMathieu Desnoyers    |      parisc: | TODO |
462384b36fSNicholas Piggin    |     powerpc: |  ok  |
477156fc29SAndrea Parri    |       riscv: | TODO |
48*e7615c92SHeiko Carstens    |        s390: |  ok  |
496a546c7eSMathieu Desnoyers    |          sh: | TODO |
506a546c7eSMathieu Desnoyers    |       sparc: | TODO |
516a546c7eSMathieu Desnoyers    |          um: | TODO |
526a546c7eSMathieu Desnoyers    |         x86: |  ok  |
536a546c7eSMathieu Desnoyers    |      xtensa: | TODO |
546a546c7eSMathieu Desnoyers    -----------------------
55