diff options
Diffstat (limited to 'arch/csky/kernel')
| -rw-r--r-- | arch/csky/kernel/dumpstack.c | 4 | ||||
| -rw-r--r-- | arch/csky/kernel/ptrace.c | 3 | ||||
| -rw-r--r-- | arch/csky/kernel/smp.c | 3 | 
3 files changed, 8 insertions, 2 deletions
diff --git a/arch/csky/kernel/dumpstack.c b/arch/csky/kernel/dumpstack.c index 659253e9989c..d67f9777cfd9 100644 --- a/arch/csky/kernel/dumpstack.c +++ b/arch/csky/kernel/dumpstack.c @@ -38,7 +38,11 @@ void show_stack(struct task_struct *task, unsigned long *stack)  		if (task)  			stack = (unsigned long *)thread_saved_fp(task);  		else +#ifdef CONFIG_STACKTRACE +			asm volatile("mov %0, r8\n":"=r"(stack)::"memory"); +#else  			stack = (unsigned long *)&stack; +#endif  	}  	show_trace(stack); diff --git a/arch/csky/kernel/ptrace.c b/arch/csky/kernel/ptrace.c index 57f1afe19a52..f2f12fff36f7 100644 --- a/arch/csky/kernel/ptrace.c +++ b/arch/csky/kernel/ptrace.c @@ -8,6 +8,7 @@  #include <linux/ptrace.h>  #include <linux/regset.h>  #include <linux/sched.h> +#include <linux/sched/task_stack.h>  #include <linux/signal.h>  #include <linux/smp.h>  #include <linux/uaccess.h> @@ -159,7 +160,7 @@ static int fpr_set(struct task_struct *target,  static const struct user_regset csky_regsets[] = {  	[REGSET_GPR] = {  		.core_note_type = NT_PRSTATUS, -		.n = ELF_NGREG, +		.n = sizeof(struct pt_regs) / sizeof(u32),  		.size = sizeof(u32),  		.align = sizeof(u32),  		.get = &gpr_get, diff --git a/arch/csky/kernel/smp.c b/arch/csky/kernel/smp.c index ddc4dd79f282..b07a534b3062 100644 --- a/arch/csky/kernel/smp.c +++ b/arch/csky/kernel/smp.c @@ -160,7 +160,8 @@ int __cpu_up(unsigned int cpu, struct task_struct *tidle)  {  	unsigned long mask = 1 << cpu; -	secondary_stack = (unsigned int)tidle->stack + THREAD_SIZE - 8; +	secondary_stack = +		(unsigned int) task_stack_page(tidle) + THREAD_SIZE - 8;  	secondary_hint = mfcr("cr31");  	secondary_ccr  = mfcr("cr18");  | 

