Module: xenomai-forge
Branch: master
Commit: 7d832873bc0737ab987a6c886ad2d5c69eb450f9

Author: Gilles Chanteperdrix <>
Date:   Wed Jun  5 08:03:39 2013 +0200

cobalt/arm: be flexible with selecting unlocked context switch on SMP

Starting with Linux 3.8, due to the change in the ASID roll-over
mechanism, we can disable unlocked context switch on SMP platforms,
which improves user-space scheduling latency and may provide a more
interesting trade-off especially since SMP platforms do not flush the
cache on mm switch, so have short mm switch time.

So, replace the Kconfig check that was forcing unlocked context switch
on SMP, with a compile-time check, which takes the kernel version into


 include/asm-arm/wrappers.h     |    5 +++++
 kernel/cobalt/arch/arm/Kconfig |   10 +++++-----
 2 files changed, 10 insertions(+), 5 deletions(-)

diff --git a/include/asm-arm/wrappers.h b/include/asm-arm/wrappers.h
index cf1f1cc..ec72d52 100644
--- a/include/asm-arm/wrappers.h
+++ b/include/asm-arm/wrappers.h
@@ -40,6 +40,11 @@
 #define vfp_current_hw_state last_VFP_context
 #endif /* Linux < 3.1 */
+#if defined(CONFIG_SMP) && !defined(CONFIG_XENO_HW_UNLOCKED_SWITCH) && \
+#error "ARM/smp requires CONFIG_XENO_HW_UNLOCKED_SWITCH for kernel < 3.8.0"
 static inline void fp_init(union fp_state *state)
        /* FIXME: This is insufficient. */
diff --git a/kernel/cobalt/arch/arm/Kconfig b/kernel/cobalt/arch/arm/Kconfig
index 4045310..e89049b 100644
--- a/kernel/cobalt/arch/arm/Kconfig
+++ b/kernel/cobalt/arch/arm/Kconfig
@@ -2,8 +2,8 @@ menu "Hardware options"
-       default y if (XENO_HW_UNLOCKED_SWITCH || SMP)
-       default n if !XENO_HW_UNLOCKED_SWITCH && !SMP
+       default y if XENO_HW_UNLOCKED_SWITCH
+       default n if !XENO_HW_UNLOCKED_SWITCH
        def_bool y
@@ -29,10 +29,10 @@ config XENO_HW_UNLOCKED_SWITCH
        and/or local interrupts may execute concurrently.
        This option reduces interrupt latency when costly cache and
-       TLB flushes are required to switch context, and may improve
-       concurrency on some SMP/multi-core systems as well.
+       TLB flushes are required to switch context, and is mandatory
+       on SMP/multi-core ARM platforms prior to kernel 3.8.0.
-       You definitely want to enable that option on embedded ARM
+       You definitely want to enable that option on low-end ARM

Xenomai-git mailing list

Reply via email to