1# 2# Feature name: membarrier-sync-core 3# Kconfig: ARCH_HAS_MEMBARRIER_SYNC_CORE 4# description: arch supports core serializing membarrier 5# 6# Architecture requirements 7# 8# * arm/arm64 9# 10# Rely on implicit context synchronization as a result of exception return 11# when returning from IPI handler, and when returning to user-space. 12# 13# * x86 14# 15# x86-32 uses IRET as return from interrupt, which takes care of the IPI. 16# However, it uses both IRET and SYSEXIT to go back to user-space. The IRET 17# instruction is core serializing, but not SYSEXIT. 18# 19# x86-64 uses IRET as return from interrupt, which takes care of the IPI. 20# However, it can return to user-space through either SYSRETL (compat code), 21# SYSRETQ, or IRET. 22# 23# Given that neither SYSRET{L,Q}, nor SYSEXIT, are core serializing, we rely 24# instead on write_cr3() performed by switch_mm() to provide core serialization 25# after changing the current mm, and deal with the special case of kthread -> 26# uthread (temporarily keeping current mm into active_mm) by issuing a 27# sync_core_before_usermode() in that specific case. 28# 29 ----------------------- 30 | arch |status| 31 ----------------------- 32 | alpha: | TODO | 33 | arc: | TODO | 34 | arm: | ok | 35 | arm64: | ok | 36 | c6x: | TODO | 37 | csky: | TODO | 38 | h8300: | TODO | 39 | hexagon: | TODO | 40 | ia64: | TODO | 41 | m68k: | TODO | 42 | microblaze: | TODO | 43 | mips: | TODO | 44 | nds32: | TODO | 45 | nios2: | TODO | 46 | openrisc: | TODO | 47 | parisc: | TODO | 48 | powerpc: | TODO | 49 | riscv: | TODO | 50 | s390: | TODO | 51 | sh: | TODO | 52 | sparc: | TODO | 53 | um: | TODO | 54 | unicore32: | TODO | 55 | x86: | ok | 56 | xtensa: | TODO | 57 ----------------------- 58