Browse Source

powerpc: take dereferencing to ret_from_kernel_thread()

Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
Al Viro 12 years ago
parent
commit
53b50f9483
2 changed files with 2 additions and 3 deletions
  1. 1 0
      arch/powerpc/kernel/entry_64.S
  2. 1 3
      arch/powerpc/kernel/process.c

+ 1 - 0
arch/powerpc/kernel/entry_64.S

@@ -373,6 +373,7 @@ _GLOBAL(ret_from_fork)
 _GLOBAL(ret_from_kernel_thread)
 	bl	.schedule_tail
 	REST_NVGPRS(r1)
+	ld	r14, 0(r14)
 	mtlr	r14
 	mr	r3,r15
 	blrl

+ 1 - 3
arch/powerpc/kernel/process.c

@@ -749,12 +749,10 @@ int copy_thread(unsigned long clone_flags, unsigned long usp,
 		struct thread_info *ti = (void *)task_stack_page(p);
 		memset(childregs, 0, sizeof(struct pt_regs));
 		childregs->gpr[1] = sp + sizeof(struct pt_regs);
+		childregs->gpr[14] = usp;	/* function */
 #ifdef CONFIG_PPC64
-		childregs->gpr[14] = *(unsigned long *)usp;
 		clear_tsk_thread_flag(p, TIF_32BIT);
 		childregs->softe = 1;
-#else
-		childregs->gpr[14] = usp;	/* function */
 #endif
 		childregs->gpr[15] = arg;
 		p->thread.regs = NULL;	/* no user register state */