Module: xenomai-2.6
Branch: master
Commit: 41cb1f73814d1094e0ea75ccbbd23ff01280787e
URL:    
http://git.xenomai.org/?p=xenomai-2.6.git;a=commit;h=41cb1f73814d1094e0ea75ccbbd23ff01280787e

Author: Gilles Chanteperdrix <gilles.chanteperd...@xenomai.org>
Date:   Sat Mar 29 21:41:18 2014 +0100

hal/arm: adapt context switch to Linux 3.11+

---

 include/asm-arm/bits/thread.h |    2 +-
 ksrc/arch/arm/switch.S        |   19 +++++++++++++++++--
 2 files changed, 18 insertions(+), 3 deletions(-)

diff --git a/include/asm-arm/bits/thread.h b/include/asm-arm/bits/thread.h
index dba45c9..67f1465 100644
--- a/include/asm-arm/bits/thread.h
+++ b/include/asm-arm/bits/thread.h
@@ -42,7 +42,7 @@ static inline void xnarch_init_tcb(xnarchtcb_t * tcb)
        tcb->mm = NULL;
        tcb->active_mm = NULL;
        tcb->tip = &tcb->ti;
-       tcb->ti.tp_value = 0;
+       memset(&tcb->ti.tp_value, '\0', sizeof(tcb->ti.tp_value));
        tcb->ti.cpu_domain = xnarch_current_domain_access_control();
 #ifdef CONFIG_XENO_HW_FPU
        tcb->user_fpu_owner = NULL;
diff --git a/ksrc/arch/arm/switch.S b/ksrc/arch/arm/switch.S
index 8f48229..faf7191 100644
--- a/ksrc/arch/arm/switch.S
+++ b/ksrc/arch/arm/switch.S
@@ -37,6 +37,21 @@
        .endm
 #endif
 
+#if LINUX_VERSION_CODE < KERNEL_VERSION(3, 11, 0)
+       .macro load_tls base, tp, tpuser
+       ldr     \tp, [\base, #TI_TP_VALUE]
+       .endm
+       
+       .macro switch_tls base, tp, tpuser, tmp1, tmp2
+       set_tls \tp, \tmp1, \tmp2
+       .endm
+#else
+       .macro load_tls base, tp, tpuser
+       ldr     \tp, [\base, #TI_TP_VALUE]
+       ldr     \tpuser, [\base, #TI_TP_VALUE + 4]
+       .endm
+#endif
+       
 #if LINUX_VERSION_CODE <= KERNEL_VERSION(2, 6, 31)
 #define ARM(x...)      x
 #define THUMB(x...)
@@ -152,17 +167,17 @@ ENDPROC(rthal_vfp_load)
  */
 ENTRY(rthal_thread_switch)
        add     ip, r1, #TI_CPU_SAVE
-       ldr     r3, [r2, #TI_TP_VALUE]
  ARM(  stmia   ip!, {r4 - sl, fp, sp, lr} )    @ Store most regs on stack
  THUMB(        stmia   ip!, {r4 - sl, fp}         )    @ Store most regs on 
stack
  THUMB(        str     sp, [ip], #4               )
  THUMB(        str     lr, [ip], #4               )
+       load_tls r2, r4, r5
 #ifdef USE_DOMAINS
        ldr     r6, [r2, #TI_CPU_DOMAIN]
 #endif
 
        clear_exclusive_monitor
-       set_tls r3, r4, r5
+       switch_tls r1, r4, r5, r3, r7
 #ifdef USE_DOMAINS
        mcr     p15, 0, r6, c3, c0, 0           @ Set domain register
 #endif


_______________________________________________
Xenomai-git mailing list
Xenomai-git@xenomai.org
http://www.xenomai.org/mailman/listinfo/xenomai-git

Reply via email to