diff options
Diffstat (limited to 'arch/powerpc/kernel/process.c')
| -rw-r--r-- | arch/powerpc/kernel/process.c | 6 | 
1 files changed, 3 insertions, 3 deletions
diff --git a/arch/powerpc/kernel/process.c b/arch/powerpc/kernel/process.c index b62046bf3bb8..0fbda89cd1bb 100644 --- a/arch/powerpc/kernel/process.c +++ b/arch/powerpc/kernel/process.c @@ -1855,7 +1855,7 @@ void start_thread(struct pt_regs *regs, unsigned long start, unsigned long sp)  		tm_reclaim_current(0);  #endif -	memset(regs->gpr, 0, sizeof(regs->gpr)); +	memset(®s->gpr[1], 0, sizeof(regs->gpr) - sizeof(regs->gpr[0]));  	regs->ctr = 0;  	regs->link = 0;  	regs->xer = 0; @@ -2158,12 +2158,12 @@ static unsigned long ___get_wchan(struct task_struct *p)  		return 0;  	do { -		sp = *(unsigned long *)sp; +		sp = READ_ONCE_NOCHECK(*(unsigned long *)sp);  		if (!validate_sp(sp, p, STACK_FRAME_OVERHEAD) ||  		    task_is_running(p))  			return 0;  		if (count > 0) { -			ip = ((unsigned long *)sp)[STACK_FRAME_LR_SAVE]; +			ip = READ_ONCE_NOCHECK(((unsigned long *)sp)[STACK_FRAME_LR_SAVE]);  			if (!in_sched_functions(ip))  				return ip;  		}  | 
