Skip to content

Commit 6b5f259

Browse files
committed
Merge tag 'csky-for-linus-5.7-rc8' of git://github.com/c-sky/csky-linux
Pull csky fixes from Guo Ren: "Another four fixes for csky: - fix req_syscall debug - fix abiv2 syscall_trace - fix preempt enable - clean up regs usage in entry.S" * tag 'csky-for-linus-5.7-rc8' of git://github.com/c-sky/csky-linux: csky: Fixup CONFIG_DEBUG_RSEQ csky: Coding convention in entry.S csky: Fixup abiv2 syscall_trace break a4 & a5 csky: Fixup CONFIG_PREEMPT panic
2 parents b0c3ba3 + f36e0aa commit 6b5f259

File tree

4 files changed

+66
-71
lines changed

4 files changed

+66
-71
lines changed

arch/csky/abiv1/inc/abi/entry.h

Lines changed: 0 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -80,7 +80,6 @@
8080
.endm
8181

8282
.macro RESTORE_ALL
83-
psrclr ie
8483
ldw lr, (sp, 4)
8584
ldw a0, (sp, 8)
8685
mtcr a0, epc
@@ -175,9 +174,4 @@
175174
movi r6, 0
176175
cpwcr r6, cpcr31
177176
.endm
178-
179-
.macro ANDI_R3 rx, imm
180-
lsri \rx, 3
181-
andi \rx, (\imm >> 3)
182-
.endm
183177
#endif /* __ASM_CSKY_ENTRY_H */

arch/csky/abiv2/inc/abi/entry.h

Lines changed: 2 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,8 @@
1313
#define LSAVE_A1 28
1414
#define LSAVE_A2 32
1515
#define LSAVE_A3 36
16+
#define LSAVE_A4 40
17+
#define LSAVE_A5 44
1618

1719
#define KSPTOUSP
1820
#define USPTOKSP
@@ -63,7 +65,6 @@
6365
.endm
6466

6567
.macro RESTORE_ALL
66-
psrclr ie
6768
ldw tls, (sp, 0)
6869
ldw lr, (sp, 4)
6970
ldw a0, (sp, 8)
@@ -301,9 +302,4 @@
301302
jmpi 3f /* jump to va */
302303
3:
303304
.endm
304-
305-
.macro ANDI_R3 rx, imm
306-
lsri \rx, 3
307-
andi \rx, (\imm >> 3)
308-
.endm
309305
#endif /* __ASM_CSKY_ENTRY_H */

arch/csky/include/asm/thread_info.h

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -81,4 +81,10 @@ static inline struct thread_info *current_thread_info(void)
8181
#define _TIF_RESTORE_SIGMASK (1 << TIF_RESTORE_SIGMASK)
8282
#define _TIF_SECCOMP (1 << TIF_SECCOMP)
8383

84+
#define _TIF_WORK_MASK (_TIF_NEED_RESCHED | _TIF_SIGPENDING | \
85+
_TIF_NOTIFY_RESUME | _TIF_UPROBE)
86+
87+
#define _TIF_SYSCALL_WORK (_TIF_SYSCALL_TRACE | _TIF_SYSCALL_AUDIT | \
88+
_TIF_SYSCALL_TRACEPOINT)
89+
8490
#endif /* _ASM_CSKY_THREAD_INFO_H */

arch/csky/kernel/entry.S

Lines changed: 58 additions & 59 deletions
Original file line numberDiff line numberDiff line change
@@ -128,39 +128,41 @@ tlbop_end 1
128128
ENTRY(csky_systemcall)
129129
SAVE_ALL TRAP0_SIZE
130130
zero_fp
131-
#ifdef CONFIG_RSEQ_DEBUG
132-
mov a0, sp
133-
jbsr rseq_syscall
134-
#endif
135131
psrset ee, ie
136132

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
140136

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
145141
bf ret_from_exception
146142

147143
mov r9, sp
148144
bmaski r10, THREAD_SHIFT
149145
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
153150
bt csky_syscall_trace
154151
#if defined(__CSKYABIV2__)
155152
subi sp, 8
156153
stw r5, (sp, 0x4)
157154
stw r4, (sp, 0x0)
158-
jsr r11 /* Do system call */
155+
jsr syscallid /* Do system call */
159156
addi sp, 8
160157
#else
161-
jsr r11
158+
jsr syscallid
162159
#endif
163160
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
164166
jmpi ret_from_exception
165167

166168
csky_syscall_trace:
@@ -173,18 +175,23 @@ csky_syscall_trace:
173175
ldw a3, (sp, LSAVE_A3)
174176
#if defined(__CSKYABIV2__)
175177
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
178184
#else
179185
ldw r6, (sp, LSAVE_A4)
180186
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 */
185188
#endif
186189
stw a0, (sp, LSAVE_A0) /* Save return value */
187190

191+
#ifdef CONFIG_DEBUG_RSEQ
192+
mov a0, sp
193+
jbsr rseq_syscall
194+
#endif
188195
mov a0, sp /* right now, sp --> pt_regs */
189196
jbsr syscall_trace_exit
190197
br ret_from_exception
@@ -200,18 +207,20 @@ ENTRY(ret_from_fork)
200207
mov r9, sp
201208
bmaski r10, THREAD_SHIFT
202209
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
206214
bf ret_from_exception
207215
mov a0, sp /* sp = pt_regs pointer */
208216
jbsr syscall_trace_exit
209217

210218
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
214222

223+
bt 1f
215224
/*
216225
* Load address of current->thread_info, Then get address of task_struct
217226
* Get task_needreshed in task_struct
@@ -220,11 +229,24 @@ ret_from_exception:
220229
bmaski r10, THREAD_SHIFT
221230
andn r9, r10
222231

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
226236
bt exit_work
227237
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+
228250
#ifdef CONFIG_TRACE_IRQFLAGS
229251
ld r10, (sp, LSAVE_PSR)
230252
btsti r10, 6
@@ -235,14 +257,15 @@ ret_from_exception:
235257
RESTORE_ALL
236258

237259
exit_work:
238-
lrw syscallid, ret_from_exception
239-
mov lr, syscallid
260+
lrw r9, ret_from_exception
261+
mov lr, r9
240262

241-
btsti r12, TIF_NEED_RESCHED
263+
btsti r10, TIF_NEED_RESCHED
242264
bt work_resched
243265

266+
psrset ie
244267
mov a0, sp
245-
mov a1, r12
268+
mov a1, r10
246269
jmpi do_notify_resume
247270

248271
work_resched:
@@ -291,34 +314,10 @@ ENTRY(csky_irq)
291314
jbsr trace_hardirqs_off
292315
#endif
293316

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
307317

308318
mov a0, sp
309319
jbsr csky_do_IRQ
310320

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:
322321
jmpi ret_from_exception
323322

324323
/*

0 commit comments

Comments
 (0)