|
@@ -174,8 +174,11 @@ void show_regs(struct pt_regs *regs)
|
|
|
show_trace(NULL, (unsigned long *)regs->ctx.AX[0].U0, regs);
|
|
|
}
|
|
|
|
|
|
+/*
|
|
|
+ * Copy architecture-specific thread state
|
|
|
+ */
|
|
|
int copy_thread(unsigned long clone_flags, unsigned long usp,
|
|
|
- unsigned long arg, struct task_struct *tsk)
|
|
|
+ unsigned long kthread_arg, struct task_struct *tsk)
|
|
|
{
|
|
|
struct pt_regs *childregs = task_pt_regs(tsk);
|
|
|
void *kernel_context = ((void *) childregs +
|
|
@@ -202,12 +205,13 @@ int copy_thread(unsigned long clone_flags, unsigned long usp,
|
|
|
global_base = __core_reg_get(A1GbP);
|
|
|
childregs->ctx.AX[0].U1 = (unsigned long) global_base;
|
|
|
childregs->ctx.AX[0].U0 = (unsigned long) kernel_context;
|
|
|
- /* Set D1Ar1=arg and D1RtP=usp (fn) */
|
|
|
+ /* Set D1Ar1=kthread_arg and D1RtP=usp (fn) */
|
|
|
childregs->ctx.DX[4].U1 = usp;
|
|
|
- childregs->ctx.DX[3].U1 = arg;
|
|
|
+ childregs->ctx.DX[3].U1 = kthread_arg;
|
|
|
tsk->thread.int_depth = 2;
|
|
|
return 0;
|
|
|
}
|
|
|
+
|
|
|
/*
|
|
|
* Get a pointer to where the new child's register block should have
|
|
|
* been pushed.
|