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

Commit f322220d authored by Al Viro's avatar Al Viro
Browse files

s390: convert to generic kernel_execve()



same situation as with alpha and arm - only massage needed

Signed-off-by: default avatarAl Viro <viro@zeniv.linux.org.uk>
parent f9a7e025
Loading
Loading
Loading
Loading
+1 −0
Original line number Diff line number Diff line
@@ -416,6 +416,7 @@
#   define __ARCH_WANT_COMPAT_SYS_RT_SIGSUSPEND
# endif
#define __ARCH_WANT_SYS_EXECVE
#define __ARCH_WANT_KERNEL_EXECVE

/*
 * "Conditional" syscalls
+6 −24
Original line number Diff line number Diff line
@@ -355,30 +355,13 @@ ENTRY(kernel_thread_starter)
# kernel_execve function needs to deal with pt_regs that is not
# at the usual place
#
ENTRY(kernel_execve)
	stm	%r12,%r15,48(%r15)
	lr	%r14,%r15
	l	%r13,__LC_SVC_NEW_PSW+4
	ahi	%r15,-(STACK_FRAME_OVERHEAD + __PT_SIZE)
	st	%r14,__SF_BACKCHAIN(%r15)
	la	%r12,STACK_FRAME_OVERHEAD(%r15)
	xc	0(__PT_SIZE,%r12),0(%r12)
	l	%r1,BASED(.Ldo_execve)
	lr	%r5,%r12
	basr	%r14,%r1		# call do_execve
	ltr	%r2,%r2
	je	0f
	ahi	%r15,(STACK_FRAME_OVERHEAD + __PT_SIZE)
	lm	%r12,%r15,48(%r15)
	br	%r14
	# execve succeeded.
0:	ssm	__LC_PGM_NEW_PSW	# disable I/O and ext. interrupts
	l	%r15,__LC_KERNEL_STACK	# load ksp
	ahi	%r15,-(STACK_FRAME_OVERHEAD + __PT_SIZE)
	la	%r11,STACK_FRAME_OVERHEAD(%r15)
	mvc	0(__PT_SIZE,%r11),0(%r12)	# copy pt_regs
	l	%r12,__LC_THREAD_INFO
ENTRY(ret_from_kernel_execve)
	ssm	__LC_PGM_NEW_PSW	# disable I/O and ext. interrupts
	lr	%r15,%r2
	lr	%r11,%r2
	ahi	%r15,-STACK_FRAME_OVERHEAD
	xc	__SF_BACKCHAIN(4,%r15),__SF_BACKCHAIN(%r15)
	l	%r12,__LC_THREAD_INFO
	ssm	__LC_SVC_NEW_PSW	# reenable interrupts
	j	sysc_return

@@ -941,7 +924,6 @@ cleanup_idle_wait:
.Ldo_signal:		.long	do_signal
.Ldo_notify_resume:	.long	do_notify_resume
.Ldo_per_trap:		.long	do_per_trap
.Ldo_execve:		.long	do_execve
.Ljump_table:		.long	pgm_check_table
.Lschedule:		.long	schedule
#ifdef CONFIG_PREEMPT
+6 −25
Original line number Diff line number Diff line
@@ -369,32 +369,13 @@ ENTRY(kernel_thread_starter)
	la	%r2,0
	br	%r11			# do_exit

#
# kernel_execve function needs to deal with pt_regs that is not
# at the usual place
#
ENTRY(kernel_execve)
	stmg	%r12,%r15,96(%r15)
	lgr	%r14,%r15
	aghi	%r15,-(STACK_FRAME_OVERHEAD + __PT_SIZE)
	stg	%r14,__SF_BACKCHAIN(%r15)
	la	%r12,STACK_FRAME_OVERHEAD(%r15)
	xc	0(__PT_SIZE,%r12),0(%r12)
	lgr	%r5,%r12
	brasl	%r14,do_execve
	ltgfr	%r2,%r2
	je	0f
	aghi	%r15,(STACK_FRAME_OVERHEAD + __PT_SIZE)
	lmg	%r12,%r15,96(%r15)
	br	%r14
	# execve succeeded.
0:	ssm	__LC_PGM_NEW_PSW	# disable I/O and ext. interrupts
	lg	%r15,__LC_KERNEL_STACK	# load ksp
	aghi	%r15,-(STACK_FRAME_OVERHEAD + __PT_SIZE)
	la	%r11,STACK_FRAME_OVERHEAD(%r15)
	mvc	0(__PT_SIZE,%r11),0(%r12)	# copy pt_regs
	lg	%r12,__LC_THREAD_INFO
ENTRY(ret_from_kernel_execve)
	ssm	__LC_PGM_NEW_PSW	# disable I/O and ext. interrupts
	lgr	%r15,%r2
	lgr	%r11,%r2
	aghi	%r15,-STACK_FRAME_OVERHEAD
	xc	__SF_BACKCHAIN(8,%r15),__SF_BACKCHAIN(%r15)
	lg	%r12,__LC_THREAD_INFO
	ssm	__LC_SVC_NEW_PSW	# reenable interrupts
	j	sysc_return