diff options
| author | Al Viro <viro@zeniv.linux.org.uk> | 2012-10-22 22:51:14 -0400 | 
|---|---|---|
| committer | Al Viro <viro@zeniv.linux.org.uk> | 2012-11-28 23:43:42 -0500 | 
| commit | afa86fc426ff7e7f5477f15da9c405d08d5cf790 (patch) | |
| tree | 0f82925269757902ce6f7c287a968f7b439d2b2d | |
| parent | 135c37b83c81b79a888108e3f7c5f64423d8a851 (diff) | |
| download | olio-linux-3.10-afa86fc426ff7e7f5477f15da9c405d08d5cf790.tar.xz olio-linux-3.10-afa86fc426ff7e7f5477f15da9c405d08d5cf790.zip  | |
flagday: don't pass regs to copy_thread()
Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
34 files changed, 45 insertions, 60 deletions
diff --git a/arch/alpha/kernel/process.c b/arch/alpha/kernel/process.c index e9705bcc96f..b5d0d092369 100644 --- a/arch/alpha/kernel/process.c +++ b/arch/alpha/kernel/process.c @@ -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); diff --git a/arch/arm/kernel/process.c b/arch/arm/kernel/process.c index 4ab80bbb6d9..9800338c5d1 100644 --- a/arch/arm/kernel/process.c +++ b/arch/arm/kernel/process.c @@ -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); diff --git a/arch/arm64/kernel/process.c b/arch/arm64/kernel/process.c index 5a1335caf6f..cb0956bc96e 100644 --- a/arch/arm64/kernel/process.c +++ b/arch/arm64/kernel/process.c @@ -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; diff --git a/arch/avr32/kernel/process.c b/arch/avr32/kernel/process.c index 03d7aa4a4bc..fd78f58ea79 100644 --- a/arch/avr32/kernel/process.c +++ b/arch/avr32/kernel/process.c @@ -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); diff --git a/arch/blackfin/kernel/process.c b/arch/blackfin/kernel/process.c index e5ae8fcab43..582276efaaa 100644 --- a/arch/blackfin/kernel/process.c +++ b/arch/blackfin/kernel/process.c @@ -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; diff --git a/arch/c6x/kernel/process.c b/arch/c6x/kernel/process.c index a3f91895e8b..6434df476f7 100644 --- a/arch/c6x/kernel/process.c +++ b/arch/c6x/kernel/process.c @@ -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; diff --git a/arch/cris/arch-v10/kernel/process.c b/arch/cris/arch-v10/kernel/process.c index 520547c8b19..b1018750cff 100644 --- a/arch/cris/arch-v10/kernel/process.c +++ b/arch/cris/arch-v10/kernel/process.c @@ -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; diff --git a/arch/cris/arch-v32/kernel/process.c b/arch/cris/arch-v32/kernel/process.c index 331e70252df..2b23ef0e445 100644 --- a/arch/cris/arch-v32/kernel/process.c +++ b/arch/cris/arch-v32/kernel/process.c @@ -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; diff --git a/arch/frv/kernel/process.c b/arch/frv/kernel/process.c index 0039bf77b19..23916b2a12a 100644 --- a/arch/frv/kernel/process.c +++ b/arch/frv/kernel/process.c @@ -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; diff --git a/arch/h8300/kernel/process.c b/arch/h8300/kernel/process.c index b0fb4054aee..b609f63f159 100644 --- a/arch/h8300/kernel/process.c +++ b/arch/h8300/kernel/process.c @@ -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; diff --git a/arch/hexagon/kernel/process.c b/arch/hexagon/kernel/process.c index 36dce17ed25..06ae9ffcabd 100644 --- a/arch/hexagon/kernel/process.c +++ b/arch/hexagon/kernel/process.c @@ -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; diff --git a/arch/ia64/kernel/process.c b/arch/ia64/kernel/process.c index 25543a295ad..31360cbbd5f 100644 --- a/arch/ia64/kernel/process.c +++ b/arch/ia64/kernel/process.c @@ -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; diff --git a/arch/m32r/kernel/process.c b/arch/m32r/kernel/process.c index c37e9a9a8f2..765d0f57c78 100644 --- a/arch/m32r/kernel/process.c +++ b/arch/m32r/kernel/process.c @@ -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); diff --git a/arch/m68k/kernel/process.c b/arch/m68k/kernel/process.c index aa9b1100027..9a3df4df73c 100644 --- a/arch/m68k/kernel/process.c +++ b/arch/m68k/kernel/process.c @@ -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; diff --git a/arch/microblaze/kernel/process.c b/arch/microblaze/kernel/process.c index a5fed8db726..40823fd1db0 100644 --- a/arch/microblaze/kernel/process.c +++ b/arch/microblaze/kernel/process.c @@ -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); diff --git a/arch/mips/kernel/process.c b/arch/mips/kernel/process.c index d13720ac656..38097652d62 100644 --- a/arch/mips/kernel/process.c +++ b/arch/mips/kernel/process.c @@ -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; diff --git a/arch/mn10300/kernel/process.c b/arch/mn10300/kernel/process.c index 5e0ef396458..eb09f5a552f 100644 --- a/arch/mn10300/kernel/process.c +++ b/arch/mn10300/kernel/process.c @@ -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; diff --git a/arch/openrisc/kernel/process.c b/arch/openrisc/kernel/process.c index 6b853668369..00c233bf0d0 100644 --- a/arch/openrisc/kernel/process.c +++ b/arch/openrisc/kernel/process.c @@ -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; diff --git a/arch/parisc/kernel/process.c b/arch/parisc/kernel/process.c index 9753ecf49a0..d13507246c5 100644 --- a/arch/parisc/kernel/process.c +++ b/arch/parisc/kernel/process.c @@ -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 diff --git a/arch/powerpc/kernel/process.c b/arch/powerpc/kernel/process.c index a3143756763..81430674e71 100644 --- a/arch/powerpc/kernel/process.c +++ b/arch/powerpc/kernel/process.c @@ -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) diff --git a/arch/s390/kernel/process.c b/arch/s390/kernel/process.c index e37677796a0..536d64579d9 100644 --- a/arch/s390/kernel/process.c +++ b/arch/s390/kernel/process.c @@ -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 diff --git a/arch/score/kernel/process.c b/arch/score/kernel/process.c index f96379a5aee..79568466b57 100644 --- a/arch/score/kernel/process.c +++ b/arch/score/kernel/process.c @@ -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)) { diff --git a/arch/sh/kernel/process_32.c b/arch/sh/kernel/process_32.c index 1786d16b6c6..73eb66fc625 100644 --- a/arch/sh/kernel/process_32.c +++ b/arch/sh/kernel/process_32.c @@ -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; diff --git a/arch/sh/kernel/process_64.c b/arch/sh/kernel/process_64.c index d5c86a8a384..e611c85144b 100644 --- a/arch/sh/kernel/process_64.c +++ b/arch/sh/kernel/process_64.c @@ -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 */ diff --git a/arch/sparc/kernel/process_32.c b/arch/sparc/kernel/process_32.c index bf4c6addce7..ecde946ef83 100644 --- a/arch/sparc/kernel/process_32.c +++ b/arch/sparc/kernel/process_32.c @@ -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 diff --git a/arch/sparc/kernel/process_64.c b/arch/sparc/kernel/process_64.c index dff54f46728..58ef19e7e82 100644 --- a/arch/sparc/kernel/process_64.c +++ b/arch/sparc/kernel/process_64.c @@ -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; diff --git a/arch/tile/kernel/process.c b/arch/tile/kernel/process.c index 267936b51b5..0e5661e7d00 100644 --- a/arch/tile/kernel/process.c +++ b/arch/tile/kernel/process.c @@ -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; diff --git a/arch/um/kernel/process.c b/arch/um/kernel/process.c index c502c804e8b..b462b13c5ba 100644 --- a/arch/um/kernel/process.c +++ b/arch/um/kernel/process.c @@ -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; diff --git a/arch/unicore32/kernel/process.c b/arch/unicore32/kernel/process.c index 79e44e8ae31..62bad9fed03 100644 --- a/arch/unicore32/kernel/process.c +++ b/arch/unicore32/kernel/process.c @@ -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); diff --git a/arch/x86/kernel/process_32.c b/arch/x86/kernel/process_32.c index 16efa974532..b5a8905785e 100644 --- a/arch/x86/kernel/process_32.c +++ b/arch/x86/kernel/process_32.c @@ -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; diff --git a/arch/x86/kernel/process_64.c b/arch/x86/kernel/process_64.c index 74aac76c6e3..6e68a619496 100644 --- a/arch/x86/kernel/process_64.c +++ b/arch/x86/kernel/process_64.c @@ -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; diff --git a/arch/xtensa/kernel/process.c b/arch/xtensa/kernel/process.c index 0036c14739f..1accf28da5f 100644 --- a/arch/xtensa/kernel/process.c +++ b/arch/xtensa/kernel/process.c @@ -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); diff --git a/include/linux/sched.h b/include/linux/sched.h index c57249782e4..78a2ae3470d 100644 --- a/include/linux/sched.h +++ b/include/linux/sched.h @@ -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); diff --git a/kernel/fork.c b/kernel/fork.c index 27a337549da..d96a562b131 100644 --- a/kernel/fork.c +++ b/kernel/fork.c @@ -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;  |