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