Merge tag 'for-3.8' of git://openrisc.net/~jonas/linux
[deliverable/linux.git] / arch / x86 / kernel / process_32.c
index 44e0bff38e724de5b9e02e5bd9581133999ad40e..b5a8905785e6121bf23527466a25d42328e72a86 100644 (file)
@@ -128,8 +128,7 @@ void release_thread(struct task_struct *dead_task)
 }
 
 int copy_thread(unsigned long clone_flags, unsigned long sp,
-       unsigned long arg,
-       struct task_struct *p, struct pt_regs *regs)
+       unsigned long arg, struct task_struct *p)
 {
        struct pt_regs *childregs = task_pt_regs(p);
        struct task_struct *tsk;
@@ -138,7 +137,7 @@ int copy_thread(unsigned long clone_flags, unsigned long sp,
        p->thread.sp = (unsigned long) childregs;
        p->thread.sp0 = (unsigned long) (childregs+1);
 
-       if (unlikely(!regs)) {
+       if (unlikely(p->flags & PF_KTHREAD)) {
                /* kernel thread */
                memset(childregs, 0, sizeof(struct pt_regs));
                p->thread.ip = (unsigned long) ret_from_kernel_thread;
@@ -156,12 +155,13 @@ int copy_thread(unsigned long clone_flags, unsigned long sp,
                memset(p->thread.ptrace_bps, 0, sizeof(p->thread.ptrace_bps));
                return 0;
        }
-       *childregs = *regs;
+       *childregs = *current_pt_regs();
        childregs->ax = 0;
-       childregs->sp = sp;
+       if (sp)
+               childregs->sp = sp;
 
        p->thread.ip = (unsigned long) ret_from_fork;
-       task_user_gs(p) = get_user_gs(regs);
+       task_user_gs(p) = get_user_gs(current_pt_regs());
 
        p->fpu_counter = 0;
        p->thread.io_bitmap_ptr = NULL;
This page took 0.024069 seconds and 5 git commands to generate.