|
@@ -45,16 +45,18 @@ rt_hw_context_switch_to:
|
|
|
#ifdef RT_USING_SMP
|
|
|
mov r0, r1
|
|
|
bl rt_cpus_lock_status_restore
|
|
|
+#ifdef RT_USING_USERSPACE
|
|
|
bl rt_thread_self
|
|
|
bl lwp_user_setting_restore
|
|
|
+#endif
|
|
|
#else
|
|
|
- bl rt_thread_self
|
|
|
#ifdef RT_USING_USERSPACE
|
|
|
+ bl rt_thread_self
|
|
|
mov r4, r0
|
|
|
bl lwp_mmu_switch
|
|
|
mov r0, r4
|
|
|
-#endif
|
|
|
bl lwp_user_setting_restore
|
|
|
+#endif
|
|
|
#endif /*RT_USING_SMP*/
|
|
|
|
|
|
b rt_hw_context_switch_exit
|
|
@@ -106,16 +108,18 @@ rt_hw_context_switch:
|
|
|
#ifdef RT_USING_SMP
|
|
|
mov r0, r2
|
|
|
bl rt_cpus_lock_status_restore
|
|
|
+#ifdef RT_USING_USERSPACE
|
|
|
bl rt_thread_self
|
|
|
bl lwp_user_setting_restore
|
|
|
+#endif
|
|
|
#else
|
|
|
- bl rt_thread_self
|
|
|
#ifdef RT_USING_USERSPACE
|
|
|
+ bl rt_thread_self
|
|
|
mov r4, r0
|
|
|
bl lwp_mmu_switch
|
|
|
mov r0, r4
|
|
|
-#endif
|
|
|
bl lwp_user_setting_restore
|
|
|
+#endif
|
|
|
#endif /*RT_USING_SMP*/
|
|
|
|
|
|
b rt_hw_context_switch_exit
|
|
@@ -147,18 +151,24 @@ rt_hw_context_switch_interrupt:
|
|
|
*/
|
|
|
#ifdef RT_USING_LWP
|
|
|
push {r0 - r3, lr}
|
|
|
+#ifdef RT_USING_USERSPACE
|
|
|
bl rt_thread_self
|
|
|
bl lwp_user_setting_save
|
|
|
+#endif
|
|
|
pop {r0 - r3, lr}
|
|
|
#endif
|
|
|
str r0, [r1]
|
|
|
|
|
|
ldr sp, [r2]
|
|
|
mov r0, r3
|
|
|
+#ifdef RT_USING_USERSPACE
|
|
|
mov r4, r0
|
|
|
+#endif
|
|
|
bl rt_cpus_lock_status_restore
|
|
|
+#ifdef RT_USING_USERSPACE
|
|
|
mov r0, r4
|
|
|
bl lwp_user_setting_restore
|
|
|
+#endif
|
|
|
b rt_hw_context_switch_exit
|
|
|
|
|
|
#else /*RT_USING_SMP*/
|
|
@@ -177,10 +187,12 @@ rt_hw_context_switch_interrupt:
|
|
|
str r0, [r3]
|
|
|
mov r3, #1 @ set rt_thread_switch_interrupt_flag to 1
|
|
|
str r3, [ip]
|
|
|
+#ifdef RT_USING_USERSPACE
|
|
|
push {r1, lr}
|
|
|
mov r0, r2
|
|
|
bl lwp_user_setting_save
|
|
|
pop {r1, lr}
|
|
|
+#endif
|
|
|
_reswitch:
|
|
|
ldr ip, =rt_interrupt_to_thread @ set rt_interrupt_to_thread
|
|
|
str r1, [ip]
|