Commit 135c37b8 authored by Al Viro's avatar Al Viro
Browse files

bfin: switch to generic vfork, get rid of pointless wrappers



Signed-off-by: default avatarAl Viro <viro@zeniv.linux.org.uk>
parent 3e41f9ba
Loading
Loading
Loading
Loading
+1 −0
Original line number Diff line number Diff line
@@ -447,6 +447,7 @@
#define __ARCH_WANT_SYS_RT_SIGACTION
#define __ARCH_WANT_SYS_RT_SIGSUSPEND
#define __ARCH_WANT_SYS_EXECVE
#define __ARCH_WANT_SYS_VFORK

/*
 * "Conditional" syscalls
+0 −33
Original line number Diff line number Diff line
@@ -57,36 +57,3 @@ ENTRY(_ret_from_fork)
	RESTORE_CONTEXT
	rti;
ENDPROC(_ret_from_fork)

ENTRY(_sys_vfork)
	r0 = sp;
	r0 += 24;
	[--sp] = rets;
	SP += -12;
	pseudo_long_call _bfin_vfork, p2;
	SP += 12;
	rets = [sp++];
	rts;
ENDPROC(_sys_vfork)

ENTRY(_sys_clone)
	r0 = sp;
	r0 += 24;
	[--sp] = rets;
	SP += -12;
	pseudo_long_call _bfin_clone, p2;
	SP += 12;
	rets = [sp++];
	rts;
ENDPROC(_sys_clone)

ENTRY(_sys_rt_sigreturn)
	r0 = sp;
	r0 += 24;
	[--sp] = rets;
	SP += -12;
	pseudo_long_call _do_rt_sigreturn, p2;
	SP += 12;
	rets = [sp++];
	rts;
ENDPROC(_sys_rt_sigreturn)
+3 −18
Original line number Diff line number Diff line
@@ -127,28 +127,13 @@ void flush_thread(void)
{
}

asmlinkage int bfin_vfork(struct pt_regs *regs)
asmlinkage int bfin_clone(unsigned long clone_flags, unsigned long newsp)
{
	return do_fork(CLONE_VFORK | CLONE_VM | SIGCHLD, rdusp(), regs, 0, NULL,
		       NULL);
}

asmlinkage int bfin_clone(struct pt_regs *regs)
{
	unsigned long clone_flags;
	unsigned long newsp;

#ifdef __ARCH_SYNC_CORE_DCACHE
	if (current->nr_cpus_allowed == num_possible_cpus())
		set_cpus_allowed_ptr(current, cpumask_of(smp_processor_id()));
#endif

	/* syscall2 puts clone_flags in r0 and usp in r1 */
	clone_flags = regs->r0;
	newsp = regs->r1;
	if (!newsp)
		newsp = rdusp();
	else
	if (newsp)
		newsp -= 12;
	return do_fork(clone_flags, newsp, regs, 0, NULL, NULL);
}
@@ -174,7 +159,7 @@ copy_thread(unsigned long clone_flags,
	} else {
		*childregs = *regs;
		childregs->r0 = 0;
		p->thread.usp = usp;
		p->thread.usp = usp ? : rdusp();
		v[0] = v[1] = 0;
	}

+2 −2
Original line number Diff line number Diff line
@@ -82,9 +82,9 @@ rt_restore_sigcontext(struct pt_regs *regs, struct sigcontext __user *sc, int *p
	return err;
}

asmlinkage int do_rt_sigreturn(unsigned long __unused)
asmlinkage int sys_rt_sigreturn(void)
{
	struct pt_regs *regs = (struct pt_regs *)__unused;
	struct pt_regs *regs = current_pt_regs();
	unsigned long usp = rdusp();
	struct rt_sigframe *frame = (struct rt_sigframe *)(usp);
	sigset_t set;
+1 −1
Original line number Diff line number Diff line
@@ -1431,7 +1431,7 @@ ENTRY(_sys_call_table)
	.long _sys_ni_syscall	/* old sys_ipc */
	.long _sys_fsync
	.long _sys_ni_syscall	/* old sys_sigreturn */
	.long _sys_clone		/* 120 */
	.long _bfin_clone		/* 120 */
	.long _sys_setdomainname
	.long _sys_newuname
	.long _sys_ni_syscall	/* old sys_modify_ldt */