Ensure we gather architecture requirements about each architecture
supporting the "sync_core" membarrier command in a single file under
Documentation/features.
Signed-off-by: Mathieu Desnoyers
Cc: Ingo Molnar
Cc: Thomas Gleixner
Cc: Peter Zijlstra (Intel)
Cc: Andrea Parri
Cc: Andrew Hunter
Cc: Andy Lutomirski
Cc: Avi Kivity
Cc: Benjamin Herrenschmidt
Cc: Boqun Feng
Cc: Dave Watson
Cc: David Sehr
Cc: Greg Hackmann
Cc: H. Peter Anvin
Cc: Linus Torvalds
Cc: Maged Michael
Cc: Michael Ellerman
Cc: Paul E. McKenney
Cc: Paul Mackerras
Cc: Russell King
Cc: Will Deacon
Cc: linux-...@vger.kernel.org
Cc: linux-a...@vger.kernel.org
---
.../sched/membarrier-sync-core/arch-support.txt| 62 ++
1 file changed, 62 insertions(+)
create mode 100644
Documentation/features/sched/membarrier-sync-core/arch-support.txt
diff --git a/Documentation/features/sched/membarrier-sync-core/arch-support.txt
b/Documentation/features/sched/membarrier-sync-core/arch-support.txt
new file mode 100644
index 000..2c815a7
--- /dev/null
+++ b/Documentation/features/sched/membarrier-sync-core/arch-support.txt
@@ -0,0 +1,62 @@
+#
+# Feature name: membarrier-sync-core
+# Kconfig: ARCH_HAS_MEMBARRIER_SYNC_CORE
+# description: arch supports core serializing membarrier
+#
+# Architecture requirements
+#
+# * arm64
+#
+# Rely on eret context synchronization when returning from IPI handler, and
+# when returning to user-space.
+#
+# * x86
+#
+# x86-32 uses IRET as return from interrupt, which takes care of the IPI.
+# However, it uses both IRET and SYSEXIT to go back to user-space. The IRET
+# instruction is core serializing, but not SYSEXIT.
+#
+# x86-64 uses IRET as return from interrupt, which takes care of the IPI.
+# However, it can return to user-space through either SYSRETL (compat code),
+# SYSRETQ, or IRET.
+#
+# Given that neither SYSRET{L,Q}, nor SYSEXIT, are core serializing, we rely
+# instead on write_cr3() performed by switch_mm() to provide core serialization
+# after changing the current mm, and deal with the special case of kthread ->
+# uthread (temporarily keeping current mm into active_mm) by issuing a
+# sync_core_before_usermode() in that specific case.
+#
+---
+| arch |status|
+---
+| alpha: | TODO |
+| arc: | TODO |
+| arm: | TODO |
+| arm64: | ok |
+|blackfin: | TODO |
+| c6x: | TODO |
+|cris: | TODO |
+| frv: | TODO |
+| h8300: | TODO |
+| hexagon: | TODO |
+|ia64: | TODO |
+|m32r: | TODO |
+|m68k: | TODO |
+| metag: | TODO |
+| microblaze: | TODO |
+|mips: | TODO |
+| mn10300: | TODO |
+| nios2: | TODO |
+|openrisc: | TODO |
+| parisc: | TODO |
+| powerpc: | TODO |
+|s390: | TODO |
+| score: | TODO |
+| sh: | TODO |
+| sparc: | TODO |
+|tile: | TODO |
+| um: | TODO |
+| unicore32: | TODO |
+| x86: | ok |
+| xtensa: | TODO |
+---
--
1.9.1