hc
2024-01-05 071106ecf68c401173c58808b1cf5f68cc50d390
kernel/arch/nds32/kernel/ex-exit.S
....@@ -8,6 +8,7 @@
88 #include <asm/asm-offsets.h>
99 #include <asm/thread_info.h>
1010 #include <asm/current.h>
11
+#include <asm/fpu.h>
1112
1213
1314
....@@ -22,10 +23,18 @@
2223 .macro restore_user_regs_first
2324 setgie.d
2425 isb
25
-
26
+#if defined(CONFIG_FPU)
27
+ addi $sp, $sp, OSP_OFFSET
28
+ lmw.adm $r12, [$sp], $r25, #0x0
29
+ sethi $p0, hi20(has_fpu)
30
+ lbsi $p0, [$p0+lo12(has_fpu)]
31
+ beqz $p0, 2f
32
+ mtsr $r25, $FUCOP_CTL
33
+2:
34
+#else
2635 addi $sp, $sp, FUCOP_CTL_OFFSET
27
-
2836 lmw.adm $r12, [$sp], $r24, #0x0
37
+#endif
2938 mtsr $r12, $SP_USR
3039 mtsr $r13, $IPC
3140 #ifdef CONFIG_HWZOL
....@@ -63,7 +72,7 @@
6372 restore_user_regs_last
6473 .endm
6574
66
-#ifdef CONFIG_PREEMPT
75
+#ifdef CONFIG_PREEMPTION
6776 .macro preempt_stop
6877 .endm
6978 #else
....@@ -111,7 +120,7 @@
111120 andi $p1, $r1, #_TIF_NEED_RESCHED
112121 bnez $p1, work_resched
113122
114
- andi $p1, $r1, #_TIF_SIGPENDING|#_TIF_NOTIFY_RESUME
123
+ andi $p1, $r1, #_TIF_SIGPENDING|#_TIF_NOTIFY_RESUME|#_TIF_NOTIFY_SIGNAL
115124 beqz $p1, no_work_pending
116125
117126 move $r0, $sp ! 'regs'
....@@ -149,12 +158,12 @@
149158 /*
150159 * preemptive kernel
151160 */
152
-#ifdef CONFIG_PREEMPT
161
+#ifdef CONFIG_PREEMPTION
153162 resume_kernel:
154163 gie_disable
155164 lwi $t0, [tsk+#TSK_TI_PREEMPT]
156165 bnez $t0, no_work_pending
157
-need_resched:
166
+
158167 lwi $t0, [tsk+#TSK_TI_FLAGS]
159168 andi $p1, $t0, #_TIF_NEED_RESCHED
160169 beqz $p1, no_work_pending
....@@ -164,7 +173,7 @@
164173 beqz $t0, no_work_pending
165174
166175 jal preempt_schedule_irq
167
- b need_resched
176
+ b no_work_pending
168177 #endif
169178
170179 /*