aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--arch/metag/kernel/process.c10
1 files changed, 7 insertions, 3 deletions
diff --git a/arch/metag/kernel/process.c b/arch/metag/kernel/process.c
index 483dff986a23..7f546183a0f0 100644
--- a/arch/metag/kernel/process.c
+++ b/arch/metag/kernel/process.c
@@ -174,8 +174,11 @@ void show_regs(struct pt_regs *regs)
174 show_trace(NULL, (unsigned long *)regs->ctx.AX[0].U0, regs); 174 show_trace(NULL, (unsigned long *)regs->ctx.AX[0].U0, regs);
175} 175}
176 176
177/*
178 * Copy architecture-specific thread state
179 */
177int copy_thread(unsigned long clone_flags, unsigned long usp, 180int copy_thread(unsigned long clone_flags, unsigned long usp,
178 unsigned long arg, struct task_struct *tsk) 181 unsigned long kthread_arg, struct task_struct *tsk)
179{ 182{
180 struct pt_regs *childregs = task_pt_regs(tsk); 183 struct pt_regs *childregs = task_pt_regs(tsk);
181 void *kernel_context = ((void *) childregs + 184 void *kernel_context = ((void *) childregs +
@@ -202,12 +205,13 @@ int copy_thread(unsigned long clone_flags, unsigned long usp,
202 global_base = __core_reg_get(A1GbP); 205 global_base = __core_reg_get(A1GbP);
203 childregs->ctx.AX[0].U1 = (unsigned long) global_base; 206 childregs->ctx.AX[0].U1 = (unsigned long) global_base;
204 childregs->ctx.AX[0].U0 = (unsigned long) kernel_context; 207 childregs->ctx.AX[0].U0 = (unsigned long) kernel_context;
205 /* Set D1Ar1=arg and D1RtP=usp (fn) */ 208 /* Set D1Ar1=kthread_arg and D1RtP=usp (fn) */
206 childregs->ctx.DX[4].U1 = usp; 209 childregs->ctx.DX[4].U1 = usp;
207 childregs->ctx.DX[3].U1 = arg; 210 childregs->ctx.DX[3].U1 = kthread_arg;
208 tsk->thread.int_depth = 2; 211 tsk->thread.int_depth = 2;
209 return 0; 212 return 0;
210 } 213 }
214
211 /* 215 /*
212 * Get a pointer to where the new child's register block should have 216 * Get a pointer to where the new child's register block should have
213 * been pushed. 217 * been pushed.