Skip to content

Commit 26b089a

Browse files
committed
Merge tag 'csky-for-linus-5.7-rc6' of git://github.com/c-sky/csky-linux
Pull csky updates from Guo Ren: - fix for copy_from/to_user (a hard-to-find bug, thx Viro) - fix for calltrace panic without FRAME_POINT - two fixes for perf - two build fixes - four fixes for non-fatal bugs (msa, rm dis_irq, cleanup psr, gdbmacros.txt) * tag 'csky-for-linus-5.7-rc6' of git://github.com/c-sky/csky-linux: csky: Fixup raw_copy_from_user() csky: Fixup gdbmacros.txt with name sp in thread_struct csky: Fixup remove unnecessary save/restore PSR code csky: Fixup remove duplicate irq_disable csky: Fixup calltrace panic csky: Fixup perf callchain unwind csky: Fixup msa highest 3 bits mask csky: Fixup perf probe -x hungup csky: Fixup compile error for abiv1 entry.S csky/ftrace: Fixup error when disable CONFIG_DYNAMIC_FTRACE
2 parents 5c33696 + 51bb38c commit 26b089a

File tree

20 files changed

+226
-178
lines changed

20 files changed

+226
-178
lines changed

arch/csky/Kconfig

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ config CSKY
88
select ARCH_HAS_SYNC_DMA_FOR_DEVICE
99
select ARCH_USE_BUILTIN_BSWAP
1010
select ARCH_USE_QUEUED_RWLOCKS if NR_CPUS>2
11+
select ARCH_WANT_FRAME_POINTERS if !CPU_CK610
1112
select COMMON_CLK
1213
select CLKSRC_MMIO
1314
select CSKY_MPINTC if CPU_CK860
@@ -38,6 +39,7 @@ config CSKY
3839
select HAVE_ARCH_TRACEHOOK
3940
select HAVE_ARCH_AUDITSYSCALL
4041
select HAVE_COPY_THREAD_TLS
42+
select HAVE_DEBUG_BUGVERBOSE
4143
select HAVE_DYNAMIC_FTRACE
4244
select HAVE_DYNAMIC_FTRACE_WITH_REGS
4345
select HAVE_FUNCTION_TRACER

arch/csky/Makefile

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -47,7 +47,7 @@ ifeq ($(CSKYABI),abiv2)
4747
KBUILD_CFLAGS += -mno-stack-size
4848
endif
4949

50-
ifdef CONFIG_STACKTRACE
50+
ifdef CONFIG_FRAME_POINTER
5151
KBUILD_CFLAGS += -mbacktrace
5252
endif
5353

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

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -167,8 +167,8 @@
167167
* BA Reserved C D V
168168
*/
169169
cprcr r6, cpcr30
170-
lsri r6, 28
171-
lsli r6, 28
170+
lsri r6, 29
171+
lsli r6, 29
172172
addi r6, 0xe
173173
cpwcr r6, cpcr30
174174

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

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -285,8 +285,8 @@
285285
*/
286286
mfcr r6, cr<30, 15> /* Get MSA0 */
287287
2:
288-
lsri r6, 28
289-
lsli r6, 28
288+
lsri r6, 29
289+
lsli r6, 29
290290
addi r6, 0x1ce
291291
mtcr r6, cr<30, 15> /* Set MSA0 */
292292

arch/csky/abiv2/mcount.S

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -103,6 +103,8 @@ ENTRY(_mcount)
103103
mov a0, lr
104104
subi a0, 4
105105
ldw a1, (sp, 24)
106+
lrw a2, function_trace_op
107+
ldw a2, (a2, 0)
106108

107109
jsr r26
108110

arch/csky/include/asm/processor.h

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -41,17 +41,15 @@ extern struct cpuinfo_csky cpu_data[];
4141
#define TASK_UNMAPPED_BASE (TASK_SIZE / 3)
4242

4343
struct thread_struct {
44-
unsigned long ksp; /* kernel stack pointer */
45-
unsigned long sr; /* saved status register */
44+
unsigned long sp; /* kernel stack pointer */
4645
unsigned long trap_no; /* saved status register */
4746

4847
/* FPU regs */
4948
struct user_fp __aligned(16) user_fp;
5049
};
5150

5251
#define INIT_THREAD { \
53-
.ksp = sizeof(init_stack) + (unsigned long) &init_stack, \
54-
.sr = DEFAULT_PSR_VALUE, \
52+
.sp = sizeof(init_stack) + (unsigned long) &init_stack, \
5553
}
5654

5755
/*

arch/csky/include/asm/ptrace.h

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -58,6 +58,16 @@ static inline unsigned long kernel_stack_pointer(struct pt_regs *regs)
5858
return regs->usp;
5959
}
6060

61+
static inline unsigned long frame_pointer(struct pt_regs *regs)
62+
{
63+
return regs->regs[4];
64+
}
65+
static inline void frame_pointer_set(struct pt_regs *regs,
66+
unsigned long val)
67+
{
68+
regs->regs[4] = val;
69+
}
70+
6171
extern int regs_query_register_offset(const char *name);
6272
extern unsigned long regs_get_kernel_stack_nth(struct pt_regs *regs,
6373
unsigned int n);

arch/csky/include/asm/thread_info.h

Lines changed: 11 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,13 @@ struct thread_info {
3838
#define THREAD_SIZE_ORDER (THREAD_SHIFT - PAGE_SHIFT)
3939

4040
#define thread_saved_fp(tsk) \
41-
((unsigned long)(((struct switch_stack *)(tsk->thread.ksp))->r8))
41+
((unsigned long)(((struct switch_stack *)(tsk->thread.sp))->r8))
42+
43+
#define thread_saved_sp(tsk) \
44+
((unsigned long)(tsk->thread.sp))
45+
46+
#define thread_saved_lr(tsk) \
47+
((unsigned long)(((struct switch_stack *)(tsk->thread.sp))->r15))
4248

4349
static inline struct thread_info *current_thread_info(void)
4450
{
@@ -54,10 +60,10 @@ static inline struct thread_info *current_thread_info(void)
5460
#define TIF_SIGPENDING 0 /* signal pending */
5561
#define TIF_NOTIFY_RESUME 1 /* callback before returning to user */
5662
#define TIF_NEED_RESCHED 2 /* rescheduling necessary */
57-
#define TIF_SYSCALL_TRACE 3 /* syscall trace active */
58-
#define TIF_SYSCALL_TRACEPOINT 4 /* syscall tracepoint instrumentation */
59-
#define TIF_SYSCALL_AUDIT 5 /* syscall auditing */
60-
#define TIF_UPROBE 6 /* uprobe breakpoint or singlestep */
63+
#define TIF_UPROBE 3 /* uprobe breakpoint or singlestep */
64+
#define TIF_SYSCALL_TRACE 4 /* syscall trace active */
65+
#define TIF_SYSCALL_TRACEPOINT 5 /* syscall tracepoint instrumentation */
66+
#define TIF_SYSCALL_AUDIT 6 /* syscall auditing */
6167
#define TIF_POLLING_NRFLAG 16 /* poll_idle() is TIF_NEED_RESCHED */
6268
#define TIF_MEMDIE 18 /* is terminating due to OOM killer */
6369
#define TIF_RESTORE_SIGMASK 20 /* restore signal mask in do_signal() */

arch/csky/include/asm/uaccess.h

Lines changed: 26 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -253,7 +253,7 @@ do { \
253253

254254
extern int __get_user_bad(void);
255255

256-
#define __copy_user(to, from, n) \
256+
#define ___copy_to_user(to, from, n) \
257257
do { \
258258
int w0, w1, w2, w3; \
259259
asm volatile( \
@@ -288,31 +288,34 @@ do { \
288288
" subi %0, 4 \n" \
289289
" br 3b \n" \
290290
"5: cmpnei %0, 0 \n" /* 1B */ \
291-
" bf 8f \n" \
291+
" bf 13f \n" \
292292
" ldb %3, (%2, 0) \n" \
293293
"6: stb %3, (%1, 0) \n" \
294294
" addi %2, 1 \n" \
295295
" addi %1, 1 \n" \
296296
" subi %0, 1 \n" \
297297
" br 5b \n" \
298-
"7: br 8f \n" \
298+
"7: subi %0, 4 \n" \
299+
"8: subi %0, 4 \n" \
300+
"12: subi %0, 4 \n" \
301+
" br 13f \n" \
299302
".section __ex_table, \"a\" \n" \
300303
".align 2 \n" \
301-
".long 2b, 7b \n" \
302-
".long 9b, 7b \n" \
303-
".long 10b, 7b \n" \
304+
".long 2b, 13f \n" \
305+
".long 4b, 13f \n" \
306+
".long 6b, 13f \n" \
307+
".long 9b, 12b \n" \
308+
".long 10b, 8b \n" \
304309
".long 11b, 7b \n" \
305-
".long 4b, 7b \n" \
306-
".long 6b, 7b \n" \
307310
".previous \n" \
308-
"8: \n" \
311+
"13: \n" \
309312
: "=r"(n), "=r"(to), "=r"(from), "=r"(w0), \
310313
"=r"(w1), "=r"(w2), "=r"(w3) \
311314
: "0"(n), "1"(to), "2"(from) \
312315
: "memory"); \
313316
} while (0)
314317

315-
#define __copy_user_zeroing(to, from, n) \
318+
#define ___copy_from_user(to, from, n) \
316319
do { \
317320
int tmp; \
318321
int nsave; \
@@ -355,22 +358,22 @@ do { \
355358
" addi %1, 1 \n" \
356359
" subi %0, 1 \n" \
357360
" br 5b \n" \
358-
"8: mov %3, %0 \n" \
359-
" movi %4, 0 \n" \
360-
"9: stb %4, (%1, 0) \n" \
361-
" addi %1, 1 \n" \
362-
" subi %3, 1 \n" \
363-
" cmpnei %3, 0 \n" \
364-
" bt 9b \n" \
365-
" br 7f \n" \
361+
"8: stw %3, (%1, 0) \n" \
362+
" subi %0, 4 \n" \
363+
" bf 7f \n" \
364+
"9: subi %0, 8 \n" \
365+
" bf 7f \n" \
366+
"13: stw %3, (%1, 8) \n" \
367+
" subi %0, 12 \n" \
368+
" bf 7f \n" \
366369
".section __ex_table, \"a\" \n" \
367370
".align 2 \n" \
368-
".long 2b, 8b \n" \
371+
".long 2b, 7f \n" \
372+
".long 4b, 7f \n" \
373+
".long 6b, 7f \n" \
369374
".long 10b, 8b \n" \
370-
".long 11b, 8b \n" \
371-
".long 12b, 8b \n" \
372-
".long 4b, 8b \n" \
373-
".long 6b, 8b \n" \
375+
".long 11b, 9b \n" \
376+
".long 12b,13b \n" \
374377
".previous \n" \
375378
"7: \n" \
376379
: "=r"(n), "=r"(to), "=r"(from), "=r"(nsave), \

arch/csky/kernel/Makefile

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ extra-y := head.o vmlinux.lds
33

44
obj-y += entry.o atomic.o signal.o traps.o irq.o time.o vdso.o
55
obj-y += power.o syscall.o syscall_table.o setup.o
6-
obj-y += process.o cpu-probe.o ptrace.o dumpstack.o
6+
obj-y += process.o cpu-probe.o ptrace.o stacktrace.o
77
obj-y += probes/
88

99
obj-$(CONFIG_MODULES) += module.o

0 commit comments

Comments
 (0)