Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 58254e10 authored by Al Viro's avatar Al Viro
Browse files

powerpc: split ret_from_fork



... and get rid of in-kernel syscalls in kernel_thread()

Signed-off-by: default avatarAl Viro <viro@zeniv.linux.org.uk>
parent f322220d
Loading
Loading
Loading
Loading
+1 −0
Original line number Diff line number Diff line
@@ -139,6 +139,7 @@ config PPC
	select GENERIC_CLOCKEVENTS
	select GENERIC_STRNCPY_FROM_USER
	select GENERIC_STRNLEN_USER
	select GENERIC_KERNEL_THREAD

config EARLY_PRINTK
	bool
+0 −3
Original line number Diff line number Diff line
@@ -74,9 +74,6 @@ struct task_struct;
void start_thread(struct pt_regs *regs, unsigned long fdptr, unsigned long sp);
void release_thread(struct task_struct *);

/* Create a new kernel thread. */
extern long kernel_thread(int (*fn)(void *), void *arg, unsigned long flags);

/* Lazy FPU handling on uni-processor */
extern struct task_struct *last_task_used_math;
extern struct task_struct *last_task_used_altivec;
+11 −0
Original line number Diff line number Diff line
@@ -435,6 +435,17 @@ ret_from_fork:
	li	r3,0
	b	ret_from_syscall

	.globl	ret_from_kernel_thread
ret_from_kernel_thread:
	REST_NVGPRS(r1)
	bl	schedule_tail
	mtlr	r14
	mr	r3,r15
	PPC440EP_ERR42
	blrl
	li	r3,0
	b	do_exit		# no return

/* Traced system call support */
syscall_dotrace:
	SAVE_NVGPRS(r1)
+10 −0
Original line number Diff line number Diff line
@@ -370,6 +370,16 @@ _GLOBAL(ret_from_fork)
	li	r3,0
	b	syscall_exit

_GLOBAL(ret_from_kernel_thread)
	bl	.schedule_tail
	REST_NVGPRS(r1)
	REST_GPR(2,r1)
	mtlr	r14
	mr	r3,r15
	blrl
	li	r3,0
	b	.do_exit	# no return

	.section	".toc","aw"
DSCR_DEFAULT:
	.tc dscr_default[TC],dscr_default
+0 −33
Original line number Diff line number Diff line
@@ -663,39 +663,6 @@ _GLOBAL(abs)
	sub	r3,r3,r4
	blr

/*
 * Create a kernel thread
 *   kernel_thread(fn, arg, flags)
 */
_GLOBAL(kernel_thread)
	stwu	r1,-16(r1)
	stw	r30,8(r1)
	stw	r31,12(r1)
	mr	r30,r3		/* function */
	mr	r31,r4		/* argument */
	ori	r3,r5,CLONE_VM	/* flags */
	oris	r3,r3,CLONE_UNTRACED>>16
	li	r4,0		/* new sp (unused) */
	li	r0,__NR_clone
	sc
	bns+	1f		/* did system call indicate error? */
	neg	r3,r3		/* if so, make return code negative */
1:	cmpwi	0,r3,0		/* parent or child? */
	bne	2f		/* return if parent */
	li	r0,0		/* make top-level stack frame */
	stwu	r0,-16(r1)
	mtlr	r30		/* fn addr in lr */
	mr	r3,r31		/* load arg and call fn */
	PPC440EP_ERR42
	blrl
	li	r0,__NR_exit	/* exit if function returns */
	li	r3,0
	sc
2:	lwz	r30,8(r1)
	lwz	r31,12(r1)
	addi	r1,r1,16
	blr

#ifdef CONFIG_SMP
_GLOBAL(start_secondary_resume)
	/* Reset stack */
Loading