flagday: don't pass regs to copy_thread()
authorAl Viro <viro@zeniv.linux.org.uk>
Tue, 23 Oct 2012 02:51:14 +0000 (22:51 -0400)
committerAl Viro <viro@zeniv.linux.org.uk>
Thu, 29 Nov 2012 04:43:42 +0000 (23:43 -0500)
Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
34 files changed:
arch/alpha/kernel/process.c
arch/arm/kernel/process.c
arch/arm64/kernel/process.c
arch/avr32/kernel/process.c
arch/blackfin/kernel/process.c
arch/c6x/kernel/process.c
arch/cris/arch-v10/kernel/process.c
arch/cris/arch-v32/kernel/process.c
arch/frv/kernel/process.c
arch/h8300/kernel/process.c
arch/hexagon/kernel/process.c
arch/ia64/kernel/process.c
arch/m32r/kernel/process.c
arch/m68k/kernel/process.c
arch/microblaze/kernel/process.c
arch/mips/kernel/process.c
arch/mn10300/kernel/process.c
arch/openrisc/kernel/process.c
arch/parisc/kernel/process.c
arch/powerpc/kernel/process.c
arch/s390/kernel/process.c
arch/score/kernel/process.c
arch/sh/kernel/process_32.c
arch/sh/kernel/process_64.c
arch/sparc/kernel/process_32.c
arch/sparc/kernel/process_64.c
arch/tile/kernel/process.c
arch/um/kernel/process.c
arch/unicore32/kernel/process.c
arch/x86/kernel/process_32.c
arch/x86/kernel/process_64.c
arch/xtensa/kernel/process.c
include/linux/sched.h
kernel/fork.c

index e9705bcc96f968b803313523d9db863743f1dc3b..b5d0d0923699b338bff0090d21787699071567c5 100644 (file)
@@ -241,7 +241,7 @@ release_thread(struct task_struct *dead_task)
 int
 copy_thread(unsigned long clone_flags, unsigned long usp,
            unsigned long arg,
-           struct task_struct *p, struct pt_regs *wontuse)
+           struct task_struct *p)
 {
        extern void ret_from_fork(void);
        extern void ret_from_kernel_thread(void);
index 4ab80bbb6d9572ff7dadeb6b2669d04caee576c8..9800338c5d1b0e4df1b5e66ffe74f55de199637f 100644 (file)
@@ -376,7 +376,7 @@ asmlinkage void ret_from_fork(void) __asm__("ret_from_fork");
 
 int
 copy_thread(unsigned long clone_flags, unsigned long stack_start,
-           unsigned long stk_sz, struct task_struct *p, struct pt_regs *unused)
+           unsigned long stk_sz, struct task_struct *p)
 {
        struct thread_info *thread = task_thread_info(p);
        struct pt_regs *childregs = task_pt_regs(p);
index 5a1335caf6f1ea9cc01f2056b116472f9a71bf55..cb0956bc96edfe15333b0aee0012a15dcb730d13 100644 (file)
@@ -234,8 +234,7 @@ int arch_dup_task_struct(struct task_struct *dst, struct task_struct *src)
 asmlinkage void ret_from_fork(void) asm("ret_from_fork");
 
 int copy_thread(unsigned long clone_flags, unsigned long stack_start,
-               unsigned long stk_sz, struct task_struct *p,
-               struct pt_regs *unused)
+               unsigned long stk_sz, struct task_struct *p)
 {
        struct pt_regs *childregs = task_pt_regs(p);
        unsigned long tls = p->thread.tp_value;
index 03d7aa4a4bc999a4cac60a21ef0c1d84c230c99b..fd78f58ea79a7ece57d8bae9ed970ade03629a13 100644 (file)
@@ -299,7 +299,7 @@ asmlinkage void syscall_return(void);
 
 int copy_thread(unsigned long clone_flags, unsigned long usp,
                unsigned long arg,
-               struct task_struct *p, struct pt_regs *unused)
+               struct task_struct *p)
 {
        struct pt_regs *childregs = task_pt_regs(p);
 
index e5ae8fcab4386adcab79a9c80842bb72e2b71204..582276efaaa4f8759e6276201a43f33c57b6a3ae 100644 (file)
@@ -141,14 +141,14 @@ asmlinkage int bfin_clone(unsigned long clone_flags, unsigned long newsp)
 int
 copy_thread(unsigned long clone_flags,
            unsigned long usp, unsigned long topstk,
-           struct task_struct *p, struct pt_regs *regs)
+           struct task_struct *p)
 {
        struct pt_regs *childregs;
        unsigned long *v;
 
        childregs = (struct pt_regs *) (task_stack_page(p) + THREAD_SIZE) - 1;
        v = ((unsigned long *)childregs) - 2;
-       if (unlikely(!regs)) {
+       if (unlikely(p->flags & PF_KTHREAD)) {
                memset(childregs, 0, sizeof(struct pt_regs));
                v[0] = usp;
                v[1] = topstk;
@@ -157,7 +157,7 @@ copy_thread(unsigned long clone_flags,
                __asm__ __volatile__("%0 = syscfg;":"=da"(childregs->syscfg):);
                p->thread.usp = 0;
        } else {
-               *childregs = *regs;
+               *childregs = *current_pt_regs();
                childregs->r0 = 0;
                p->thread.usp = usp ? : rdusp();
                v[0] = v[1] = 0;
index a3f91895e8b48567d5ab68d6faa503884f7e487e..6434df476f7756f3f166547e41a6a01983098508 100644 (file)
@@ -139,7 +139,7 @@ void start_thread(struct pt_regs *regs, unsigned int pc, unsigned long usp)
  */
 int copy_thread(unsigned long clone_flags, unsigned long usp,
                unsigned long ustk_size,
-               struct task_struct *p, struct pt_regs *unused)
+               struct task_struct *p)
 {
        struct pt_regs *childregs;
 
index 520547c8b19693f8d3332c4d7ce24bced970d825..b1018750cffbdeeabb3c265d25ff4c0644482e9e 100644 (file)
@@ -94,8 +94,7 @@ asmlinkage void ret_from_fork(void);
 asmlinkage void ret_from_kernel_thread(void);
 
 int copy_thread(unsigned long clone_flags, unsigned long usp,
-               unsigned long arg,
-               struct task_struct *p, struct pt_regs *unused)
+               unsigned long arg, struct task_struct *p)
 {
        struct pt_regs *childregs = task_pt_regs(p);
        struct switch_stack *swstack = ((struct switch_stack *)childregs) - 1;
index 331e70252df0f6aff714a1b9e6ae969773c25d7d..2b23ef0e44523f1781ad397533593aae2f9335c7 100644 (file)
@@ -109,8 +109,7 @@ extern asmlinkage void ret_from_kernel_thread(void);
 
 int
 copy_thread(unsigned long clone_flags, unsigned long usp,
-       unsigned long arg,
-       struct task_struct *p, struct pt_regs *unused)
+       unsigned long arg, struct task_struct *p)
 {
        struct pt_regs *childregs = task_pt_regs(p);
        struct switch_stack *swstack = ((struct switch_stack *) childregs) - 1;
index 0039bf77b1926728fd1225e0d89c3538f8fe5760..23916b2a12a285933b45bdb7cd730fbc26e97fe3 100644 (file)
@@ -144,7 +144,7 @@ inline unsigned long user_stack(const struct pt_regs *regs)
  */
 int copy_thread(unsigned long clone_flags,
                unsigned long usp, unsigned long arg,
-               struct task_struct *p, struct pt_regs *unused)
+               struct task_struct *p)
 {
        struct pt_regs *childregs;
 
index b0fb4054aee527165305c39bb4d104c174ee2a86..b609f63f15909849a48240174e80a3e9b9d87b5b 100644 (file)
@@ -129,7 +129,7 @@ void flush_thread(void)
 
 int copy_thread(unsigned long clone_flags,
                 unsigned long usp, unsigned long topstk,
-                struct task_struct * p, struct pt_regs *unused)
+                struct task_struct * p)
 {
        struct pt_regs * childregs;
 
index 36dce17ed25cd1cc18159bd7d26283fc304852ad..06ae9ffcabd5438d5998a0a02ba1e56bd21334e2 100644 (file)
@@ -87,8 +87,7 @@ unsigned long thread_saved_pc(struct task_struct *tsk)
  * Copy architecture-specific thread state
  */
 int copy_thread(unsigned long clone_flags, unsigned long usp,
-               unsigned long arg, struct task_struct *p,
-               struct pt_regs *unused)
+               unsigned long arg, struct task_struct *p)
 {
        struct thread_info *ti = task_thread_info(p);
        struct hexagon_switch_stack *ss;
index 25543a295ad926fa03a80683a800a23c9a9d2fc8..31360cbbd5f8951e7f816aba3b47efea9380302b 100644 (file)
@@ -393,12 +393,13 @@ ia64_load_extra (struct task_struct *task)
 int
 copy_thread(unsigned long clone_flags,
             unsigned long user_stack_base, unsigned long user_stack_size,
-            struct task_struct *p, struct pt_regs *regs)
+            struct task_struct *p)
 {
        extern char ia64_ret_from_clone;
        struct switch_stack *child_stack, *stack;
        unsigned long rbs, child_rbs, rbs_size;
        struct pt_regs *child_ptregs;
+       struct pt_regs *regs = current_pt_regs();
        int retval = 0;
 
        child_ptregs = (struct pt_regs *) ((unsigned long) p + IA64_STK_OFFSET) - 1;
index c37e9a9a8f27f5a49a35cb393cd788b3fa7e1e87..765d0f57c787e3777a520c9dcd079cca5cbbc4d6 100644 (file)
@@ -192,7 +192,7 @@ int dump_fpu(struct pt_regs *regs, elf_fpregset_t *fpu)
 }
 
 int copy_thread(unsigned long clone_flags, unsigned long spu,
-       unsigned long arg, struct task_struct *tsk, struct pt_regs *unused)
+       unsigned long arg, struct task_struct *tsk)
 {
        struct pt_regs *childregs = task_pt_regs(tsk);
        extern void ret_from_fork(void);
index aa9b11000273f8735c489dd4cf69b89227265dc0..9a3df4df73cc5de96d639c0a18e26e9e25d12cce 100644 (file)
@@ -154,8 +154,7 @@ asmlinkage int m68k_clone(struct pt_regs *regs)
 }
 
 int copy_thread(unsigned long clone_flags, unsigned long usp,
-                unsigned long arg,
-                struct task_struct * p, struct pt_regs * unused)
+                unsigned long arg, struct task_struct *p)
 {
        struct fork_frame {
                struct switch_stack sw;
index a5fed8db7263c3f58fe20306af1b25d39bec7367..40823fd1db0bb915c87ef33650166281660ddf58 100644 (file)
@@ -120,8 +120,7 @@ void flush_thread(void)
 }
 
 int copy_thread(unsigned long clone_flags, unsigned long usp,
-               unsigned long arg,
-               struct task_struct *p, struct pt_regs *unused)
+               unsigned long arg, struct task_struct *p)
 {
        struct pt_regs *childregs = task_pt_regs(p);
        struct thread_info *ti = task_thread_info(p);
index d13720ac656f40d4cb71a71da54e15aba56c2b22..38097652d62d0d6f704f56d93508d50783d848b6 100644 (file)
@@ -114,10 +114,10 @@ void flush_thread(void)
 }
 
 int copy_thread(unsigned long clone_flags, unsigned long usp,
-       unsigned long arg, struct task_struct *p, struct pt_regs *regs)
+       unsigned long arg, struct task_struct *p)
 {
        struct thread_info *ti = task_thread_info(p);
-       struct pt_regs *childregs;
+       struct pt_regs *childregs, *regs = current_pt_regs();
        unsigned long childksp;
        p->set_child_tid = p->clear_child_tid = NULL;
 
index 5e0ef396458dd4d3bed8a7451b46470de72fd329..eb09f5a552ff31efe426914715942d78f8f39e18 100644 (file)
@@ -206,7 +206,7 @@ int arch_dup_task_struct(struct task_struct *dst, struct task_struct *src)
  */
 int copy_thread(unsigned long clone_flags,
                unsigned long c_usp, unsigned long ustk_size,
-               struct task_struct *p, struct pt_regs *unused)
+               struct task_struct *p)
 {
        struct thread_info *ti = task_thread_info(p);
        struct pt_regs *c_regs;
index 6b853668369b3dbecdd802ddd96d16e6e2575cf1..00c233bf0d0626f82e5f03eecd6e2e14659a4d49 100644 (file)
@@ -142,7 +142,7 @@ extern asmlinkage void ret_from_fork(void);
 
 int
 copy_thread(unsigned long clone_flags, unsigned long usp,
-           unsigned long arg, struct task_struct *p, struct pt_regs *regs)
+           unsigned long arg, struct task_struct *p)
 {
        struct pt_regs *userregs;
        struct pt_regs *kregs;
index 9753ecf49a06364ab2efa8e6fc32784461c4d52b..d13507246c5d84c7ae1dcf9ef4fc7e789365e120 100644 (file)
@@ -204,10 +204,9 @@ int dump_task_fpu (struct task_struct *tsk, elf_fpregset_t *r)
 
 int
 copy_thread(unsigned long clone_flags, unsigned long usp,
-           unsigned long arg,
-           struct task_struct *p, struct pt_regs *unused)
+           unsigned long arg, struct task_struct *p)
 {
-       struct pt_regs * cregs = &(p->thread.regs);
+       struct pt_regs *cregs = &(p->thread.regs);
        void *stack = task_stack_page(p);
        
        /* We have to use void * instead of a function pointer, because
index a31437567631a95ac2a8db5f5d4bffbd9bc265de..81430674e71c4a81c40546456061714d9937f5d6 100644 (file)
@@ -733,8 +733,7 @@ int arch_dup_task_struct(struct task_struct *dst, struct task_struct *src)
 extern unsigned long dscr_default; /* defined in arch/powerpc/kernel/sysfs.c */
 
 int copy_thread(unsigned long clone_flags, unsigned long usp,
-               unsigned long arg, struct task_struct *p,
-               struct pt_regs *regs)
+               unsigned long arg, struct task_struct *p)
 {
        struct pt_regs *childregs, *kregs;
        extern void ret_from_fork(void);
@@ -759,6 +758,7 @@ int copy_thread(unsigned long clone_flags, unsigned long usp,
                ti->flags |= _TIF_RESTOREALL;
                f = ret_from_kernel_thread;
        } else {
+               struct pt_regs *regs = current_pt_regs();
                CHECK_FULL_REGS(regs);
                *childregs = *regs;
                if (usp)
index e37677796a09242d08e490d296c500ff9ef84489..536d64579d9a608d21d9aad0507546557e4179d4 100644 (file)
@@ -117,8 +117,7 @@ void release_thread(struct task_struct *dead_task)
 }
 
 int copy_thread(unsigned long clone_flags, unsigned long new_stackp,
-               unsigned long arg,
-               struct task_struct *p, struct pt_regs *unused)
+               unsigned long arg, struct task_struct *p)
 {
        struct thread_info *ti;
        struct fake_frame
index f96379a5aee032cdd03e0d5194148d45a9ffd6ee..79568466b5780d02c1876f2183ba1b801994ca71 100644 (file)
@@ -87,11 +87,11 @@ void flush_thread(void) {}
  * set up the kernel stack and exception frames for a new process
  */
 int copy_thread(unsigned long clone_flags, unsigned long usp,
-               unsigned long arg,
-               struct task_struct *p, struct pt_regs *regs)
+               unsigned long arg, struct task_struct *p)
 {
        struct thread_info *ti = task_thread_info(p);
        struct pt_regs *childregs = task_pt_regs(p);
+       struct pt_regs *regs = current_pt_regs();
 
        p->thread.reg0 = (unsigned long) childregs;
        if (unlikely(p->flags & PF_KTHREAD)) {
index 1786d16b6c644f619f9c816dd388ac0eeca7230d..73eb66fc6253d4f2361252056d982bc3b33f4417 100644 (file)
@@ -128,8 +128,7 @@ asmlinkage void ret_from_fork(void);
 asmlinkage void ret_from_kernel_thread(void);
 
 int copy_thread(unsigned long clone_flags, unsigned long usp,
-               unsigned long arg,
-               struct task_struct *p, struct pt_regs *unused)
+               unsigned long arg, struct task_struct *p)
 {
        struct thread_info *ti = task_thread_info(p);
        struct pt_regs *childregs;
index d5c86a8a3849eda6a1f018b04e60a99d117c6f21..e611c85144b1753b3871c125a0ed9d5ee1498900 100644 (file)
@@ -371,10 +371,9 @@ asmlinkage void ret_from_fork(void);
 asmlinkage void ret_from_kernel_thread(void);
 
 int copy_thread(unsigned long clone_flags, unsigned long usp,
-               unsigned long arg,
-               struct task_struct *p, struct pt_regs *regs)
+               unsigned long arg, struct task_struct *p)
 {
-       struct pt_regs *childregs;
+       struct pt_regs *childregs, *regs = current_pt_regs();
 
 #ifdef CONFIG_SH_FPU
        /* can't happen for a kernel thread */
index bf4c6addce7b161aa39b87e50ee5972d324b14e0..ecde946ef8349f1e711a2d41fcc1044052eab738 100644 (file)
@@ -319,11 +319,10 @@ extern void ret_from_fork(void);
 extern void ret_from_kernel_thread(void);
 
 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 thread_info *ti = task_thread_info(p);
-       struct pt_regs *childregs;
+       struct pt_regs *childregs, *regs = current_pt_regs();
        char *new_stack;
 
 #ifndef CONFIG_SMP
index dff54f46728d697548bc9a4580216171a717b18d..58ef19e7e82f438871a8d8879e2a0073cf8c71f2 100644 (file)
@@ -622,10 +622,10 @@ asmlinkage long sparc_do_fork(unsigned long clone_flags,
  * Child  -->  %o0 == parents pid, %o1 == 1
  */
 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 thread_info *t = task_thread_info(p);
+       struct pt_regs *regs = current_pt_regs();
        struct sparc_stackf *parent_sf;
        unsigned long child_stack_sz;
        char *child_trap_frame;
index 267936b51b597d31ed50330131687b0e6f6af081..0e5661e7d00d36e770ccebfe752e891fa24e1e6f 100644 (file)
@@ -157,10 +157,9 @@ void arch_release_thread_info(struct thread_info *info)
 static void save_arch_state(struct thread_struct *t);
 
 int copy_thread(unsigned long clone_flags, unsigned long sp,
-               unsigned long arg,
-               struct task_struct *p, struct pt_regs *unused)
+               unsigned long arg, struct task_struct *p)
 {
-       struct pt_regs *childregs = task_pt_regs(p);
+       struct pt_regs *childregs = task_pt_regs(p), *regs = current_pt_regs();
        unsigned long ksp;
        unsigned long *callee_regs;
 
index c502c804e8bb197407259091c7be39545b6526a8..b462b13c5bae3e8dd7211e205f2bf14a0347d821 100644 (file)
@@ -161,8 +161,7 @@ void fork_handler(void)
 }
 
 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)
 {
        void (*handler)(void);
        int kthread = current->flags & PF_KTHREAD;
index 79e44e8ae31ce313d5ff0e4cdf55611f85747095..62bad9fed03e08ad494266664a805d73f467aaea 100644 (file)
@@ -262,7 +262,7 @@ asmlinkage void ret_from_kernel_thread(void) __asm__("ret_from_kernel_thread");
 
 int
 copy_thread(unsigned long clone_flags, unsigned long stack_start,
-           unsigned long stk_sz, struct task_struct *p, struct pt_regs *unused)
+           unsigned long stk_sz, struct task_struct *p)
 {
        struct thread_info *thread = task_thread_info(p);
        struct pt_regs *childregs = task_pt_regs(p);
index 16efa974532b50ddcd7787bd06d3a4f3f3a21b5a..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 *unused)
+       unsigned long arg, struct task_struct *p)
 {
        struct pt_regs *childregs = task_pt_regs(p);
        struct task_struct *tsk;
index 74aac76c6e3486110fcbef330ca8e2d98bf99aa2..6e68a6194965d66f07de49245bb177bb7e1f1cb7 100644 (file)
@@ -146,8 +146,7 @@ static inline u32 read_32bit_tls(struct task_struct *t, int tls)
 }
 
 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)
 {
        int err;
        struct pt_regs *childregs;
index 0036c14739f85a4cb8345385c8cf3408b81adc25..1accf28da5f571722aba9e1de23d57c7defbedbe 100644 (file)
@@ -199,8 +199,7 @@ int arch_dup_task_struct(struct task_struct *dst, struct task_struct *src)
  */
 
 int copy_thread(unsigned long clone_flags, unsigned long usp_thread_fn,
-               unsigned long thread_fn_arg,
-               struct task_struct *p, struct pt_regs *unused)
+               unsigned long thread_fn_arg, struct task_struct *p)
 {
        struct pt_regs *childregs = task_pt_regs(p);
 
index c57249782e48f003614c46c85265bbaed9f5247f..78a2ae3470df7851f757e087be46f011f486f654 100644 (file)
@@ -2271,7 +2271,7 @@ extern void mm_release(struct task_struct *, struct mm_struct *);
 extern struct mm_struct *dup_mm(struct task_struct *tsk);
 
 extern int copy_thread(unsigned long, unsigned long, unsigned long,
-                       struct task_struct *, struct pt_regs *);
+                       struct task_struct *);
 extern void flush_thread(void);
 extern void exit_thread(void);
 
index 27a337549dab6b4b60744404b7488043dd73a9cd..d96a562b131122870c01832ea50c6a95a4a3868f 100644 (file)
@@ -1320,7 +1320,7 @@ static struct task_struct *copy_process(unsigned long clone_flags,
        retval = copy_io(clone_flags, p);
        if (retval)
                goto bad_fork_cleanup_namespaces;
-       retval = copy_thread(clone_flags, stack_start, stack_size, p, regs);
+       retval = copy_thread(clone_flags, stack_start, stack_size, p);
        if (retval)
                goto bad_fork_cleanup_io;