@@ -128,39 +128,41 @@ tlbop_end 1
128
128
ENTRY(csky_systemcall)
129
129
SAVE_ALL TRAP0_SIZE
130
130
zero_fp
131
- #ifdef CONFIG_RSEQ_DEBUG
132
- mov a0 , sp
133
- jbsr rseq_syscall
134
- #endif
135
131
psrset ee , ie
136
132
137
- lrw r11 , __NR_syscalls
138
- cmphs syscallid , r11 / * Check nr of syscall * /
139
- bt ret_from_exception
133
+ lrw r9 , __NR_syscalls
134
+ cmphs syscallid , r9 / * Check nr of syscall * /
135
+ bt 1f
140
136
141
- lrw r13 , sys_call_table
142
- ixw r13 , syscallid
143
- ldw r11 , ( r13 )
144
- cmpnei r11 , 0
137
+ lrw r9 , sys_call_table
138
+ ixw r9 , syscallid
139
+ ldw syscallid , ( r9 )
140
+ cmpnei syscallid , 0
145
141
bf ret_from_exception
146
142
147
143
mov r9 , sp
148
144
bmaski r10 , THREAD_SHIFT
149
145
andn r9 , r10
150
- ldw r12 , ( r9 , TINFO_FLAGS)
151
- ANDI_R3 r12 , (_TIF_SYSCALL_TRACE | _TIF_SYSCALL_TRACEPOINT | _TIF_SYSCALL_AUDIT)
152
- cmpnei r12 , 0
146
+ ldw r10 , ( r9 , TINFO_FLAGS)
147
+ lrw r9 , _TIF_SYSCALL_WORK
148
+ and r10 , r9
149
+ cmpnei r10 , 0
153
150
bt csky_syscall_trace
154
151
#if defined(__CSKYABIV2__)
155
152
subi sp , 8
156
153
stw r5 , ( sp , 0x4 )
157
154
stw r4 , ( sp , 0x0 )
158
- jsr r11 / * Do system call * /
155
+ jsr syscallid / * Do system call * /
159
156
addi sp , 8
160
157
#else
161
- jsr r11
158
+ jsr syscallid
162
159
#endif
163
160
stw a0 , ( sp , LSAVE_A0) / * Save return value * /
161
+ 1 :
162
+ #ifdef CONFIG_DEBUG_RSEQ
163
+ mov a0 , sp
164
+ jbsr rseq_syscall
165
+ #endif
164
166
jmpi ret_from_exception
165
167
166
168
csky_syscall_trace:
@@ -173,18 +175,23 @@ csky_syscall_trace:
173
175
ldw a3 , ( sp , LSAVE_A3)
174
176
#if defined(__CSKYABIV2__)
175
177
subi sp , 8
176
- stw r5 , ( sp , 0x4 )
177
- stw r4 , ( sp , 0x0 )
178
+ ldw r9 , ( sp , LSAVE_A4)
179
+ stw r9 , ( sp , 0x0 )
180
+ ldw r9 , ( sp , LSAVE_A5)
181
+ stw r9 , ( sp , 0x4 )
182
+ jsr syscallid / * Do system call * /
183
+ addi sp , 8
178
184
#else
179
185
ldw r6 , ( sp , LSAVE_A4)
180
186
ldw r7 , ( sp , LSAVE_A5)
181
- #endif
182
- jsr r11 / * Do system call * /
183
- #if defined(__CSKYABIV2__)
184
- addi sp , 8
187
+ jsr syscallid / * Do system call * /
185
188
#endif
186
189
stw a0 , ( sp , LSAVE_A0) / * Save return value * /
187
190
191
+ #ifdef CONFIG_DEBUG_RSEQ
192
+ mov a0 , sp
193
+ jbsr rseq_syscall
194
+ #endif
188
195
mov a0 , sp / * right now , sp -- > pt_regs * /
189
196
jbsr syscall_trace_exit
190
197
br ret_from_exception
@@ -200,18 +207,20 @@ ENTRY(ret_from_fork)
200
207
mov r9 , sp
201
208
bmaski r10 , THREAD_SHIFT
202
209
andn r9 , r10
203
- ldw r12 , ( r9 , TINFO_FLAGS)
204
- ANDI_R3 r12 , (_TIF_SYSCALL_TRACE | _TIF_SYSCALL_TRACEPOINT | _TIF_SYSCALL_AUDIT)
205
- cmpnei r12 , 0
210
+ ldw r10 , ( r9 , TINFO_FLAGS)
211
+ lrw r9 , _TIF_SYSCALL_WORK
212
+ and r10 , r9
213
+ cmpnei r10 , 0
206
214
bf ret_from_exception
207
215
mov a0 , sp / * sp = pt_regs pointer * /
208
216
jbsr syscall_trace_exit
209
217
210
218
ret_from_exception:
211
- ld syscallid , ( sp , LSAVE_PSR)
212
- btsti syscallid , 31
213
- bt 1f
219
+ psrclr ie
220
+ ld r9 , ( sp , LSAVE_PSR)
221
+ btsti r9 , 31
214
222
223
+ bt 1f
215
224
/ *
216
225
* Load address of current - >thread_info , Then get address of task_struct
217
226
* Get task_needreshed in task_struct
@@ -220,11 +229,24 @@ ret_from_exception:
220
229
bmaski r10 , THREAD_SHIFT
221
230
andn r9 , r10
222
231
223
- ldw r12 , ( r9 , TINFO_FLAGS)
224
- andi r12 , (_TIF_SIGPENDING | _TIF_NOTIFY_RESUME | _TIF_NEED_RESCHED | _TIF_UPROBE)
225
- cmpnei r12 , 0
232
+ ldw r10 , ( r9 , TINFO_FLAGS)
233
+ lrw r9 , _TIF_WORK_MASK
234
+ and r10 , r9
235
+ cmpnei r10 , 0
226
236
bt exit_work
227
237
1 :
238
+ #ifdef CONFIG_PREEMPTION
239
+ mov r9 , sp
240
+ bmaski r10 , THREAD_SHIFT
241
+ andn r9 , r10
242
+
243
+ ldw r10 , ( r9 , TINFO_PREEMPT)
244
+ cmpnei r10 , 0
245
+ bt 2f
246
+ jbsr preempt_schedule_irq / * irq en/disable is done inside * /
247
+ 2 :
248
+ #endif
249
+
228
250
#ifdef CONFIG_TRACE_IRQFLAGS
229
251
ld r10 , ( sp , LSAVE_PSR)
230
252
btsti r10 , 6
@@ -235,14 +257,15 @@ ret_from_exception:
235
257
RESTORE_ALL
236
258
237
259
exit_work:
238
- lrw syscallid , ret_from_exception
239
- mov lr , syscallid
260
+ lrw r9 , ret_from_exception
261
+ mov lr , r9
240
262
241
- btsti r12 , TIF_NEED_RESCHED
263
+ btsti r10 , TIF_NEED_RESCHED
242
264
bt work_resched
243
265
266
+ psrset ie
244
267
mov a0 , sp
245
- mov a1 , r12
268
+ mov a1 , r10
246
269
jmpi do_notify_resume
247
270
248
271
work_resched:
@@ -291,34 +314,10 @@ ENTRY(csky_irq)
291
314
jbsr trace_hardirqs_off
292
315
#endif
293
316
294
- #ifdef CONFIG_PREEMPTION
295
- mov r9 , sp / * Get current stack pointer * /
296
- bmaski r10 , THREAD_SHIFT
297
- andn r9 , r10 / * Get thread_info * /
298
-
299
- / *
300
- * Get task_struct - >stack.preempt_count for current ,
301
- * and increase 1 .
302
- * /
303
- ldw r12 , ( r9 , TINFO_PREEMPT)
304
- addi r12 , 1
305
- stw r12 , ( r9 , TINFO_PREEMPT)
306
- #endif
307
317
308
318
mov a0 , sp
309
319
jbsr csky_do_IRQ
310
320
311
- #ifdef CONFIG_PREEMPTION
312
- subi r12 , 1
313
- stw r12 , ( r9 , TINFO_PREEMPT)
314
- cmpnei r12 , 0
315
- bt 2f
316
- ldw r12 , ( r9 , TINFO_FLAGS)
317
- btsti r12 , TIF_NEED_RESCHED
318
- bf 2f
319
- jbsr preempt_schedule_irq / * irq en/disable is done inside * /
320
- #endif
321
- 2 :
322
321
jmpi ret_from_exception
323
322
324
323
/ *
0 commit comments