Skip to content

Commit f322220

Browse files
author
Al Viro
committed
s390: convert to generic kernel_execve()
same situation as with alpha and arm - only massage needed Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
1 parent f9a7e02 commit f322220

File tree

3 files changed

+13
-49
lines changed

3 files changed

+13
-49
lines changed

arch/s390/include/asm/unistd.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -416,6 +416,7 @@
416416
# define __ARCH_WANT_COMPAT_SYS_RT_SIGSUSPEND
417417
# endif
418418
#define __ARCH_WANT_SYS_EXECVE
419+
#define __ARCH_WANT_KERNEL_EXECVE
419420

420421
/*
421422
* "Conditional" syscalls

arch/s390/kernel/entry.S

Lines changed: 6 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -355,30 +355,13 @@ ENTRY(kernel_thread_starter)
355355
# kernel_execve function needs to deal with pt_regs that is not
356356
# at the usual place
357357
#
358-
ENTRY(kernel_execve)
359-
stm %r12,%r15,48(%r15)
360-
lr %r14,%r15
361-
l %r13,__LC_SVC_NEW_PSW+4
362-
ahi %r15,-(STACK_FRAME_OVERHEAD + __PT_SIZE)
363-
st %r14,__SF_BACKCHAIN(%r15)
364-
la %r12,STACK_FRAME_OVERHEAD(%r15)
365-
xc 0(__PT_SIZE,%r12),0(%r12)
366-
l %r1,BASED(.Ldo_execve)
367-
lr %r5,%r12
368-
basr %r14,%r1 # call do_execve
369-
ltr %r2,%r2
370-
je 0f
371-
ahi %r15,(STACK_FRAME_OVERHEAD + __PT_SIZE)
372-
lm %r12,%r15,48(%r15)
373-
br %r14
374-
# execve succeeded.
375-
0: ssm __LC_PGM_NEW_PSW # disable I/O and ext. interrupts
376-
l %r15,__LC_KERNEL_STACK # load ksp
377-
ahi %r15,-(STACK_FRAME_OVERHEAD + __PT_SIZE)
378-
la %r11,STACK_FRAME_OVERHEAD(%r15)
379-
mvc 0(__PT_SIZE,%r11),0(%r12) # copy pt_regs
380-
l %r12,__LC_THREAD_INFO
358+
ENTRY(ret_from_kernel_execve)
359+
ssm __LC_PGM_NEW_PSW # disable I/O and ext. interrupts
360+
lr %r15,%r2
361+
lr %r11,%r2
362+
ahi %r15,-STACK_FRAME_OVERHEAD
381363
xc __SF_BACKCHAIN(4,%r15),__SF_BACKCHAIN(%r15)
364+
l %r12,__LC_THREAD_INFO
382365
ssm __LC_SVC_NEW_PSW # reenable interrupts
383366
j sysc_return
384367

@@ -941,7 +924,6 @@ cleanup_idle_wait:
941924
.Ldo_signal: .long do_signal
942925
.Ldo_notify_resume: .long do_notify_resume
943926
.Ldo_per_trap: .long do_per_trap
944-
.Ldo_execve: .long do_execve
945927
.Ljump_table: .long pgm_check_table
946928
.Lschedule: .long schedule
947929
#ifdef CONFIG_PREEMPT

arch/s390/kernel/entry64.S

Lines changed: 6 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -369,32 +369,13 @@ ENTRY(kernel_thread_starter)
369369
la %r2,0
370370
br %r11 # do_exit
371371

372-
#
373-
# kernel_execve function needs to deal with pt_regs that is not
374-
# at the usual place
375-
#
376-
ENTRY(kernel_execve)
377-
stmg %r12,%r15,96(%r15)
378-
lgr %r14,%r15
379-
aghi %r15,-(STACK_FRAME_OVERHEAD + __PT_SIZE)
380-
stg %r14,__SF_BACKCHAIN(%r15)
381-
la %r12,STACK_FRAME_OVERHEAD(%r15)
382-
xc 0(__PT_SIZE,%r12),0(%r12)
383-
lgr %r5,%r12
384-
brasl %r14,do_execve
385-
ltgfr %r2,%r2
386-
je 0f
387-
aghi %r15,(STACK_FRAME_OVERHEAD + __PT_SIZE)
388-
lmg %r12,%r15,96(%r15)
389-
br %r14
390-
# execve succeeded.
391-
0: ssm __LC_PGM_NEW_PSW # disable I/O and ext. interrupts
392-
lg %r15,__LC_KERNEL_STACK # load ksp
393-
aghi %r15,-(STACK_FRAME_OVERHEAD + __PT_SIZE)
394-
la %r11,STACK_FRAME_OVERHEAD(%r15)
395-
mvc 0(__PT_SIZE,%r11),0(%r12) # copy pt_regs
396-
lg %r12,__LC_THREAD_INFO
372+
ENTRY(ret_from_kernel_execve)
373+
ssm __LC_PGM_NEW_PSW # disable I/O and ext. interrupts
374+
lgr %r15,%r2
375+
lgr %r11,%r2
376+
aghi %r15,-STACK_FRAME_OVERHEAD
397377
xc __SF_BACKCHAIN(8,%r15),__SF_BACKCHAIN(%r15)
378+
lg %r12,__LC_THREAD_INFO
398379
ssm __LC_SVC_NEW_PSW # reenable interrupts
399380
j sysc_return
400381

0 commit comments

Comments
 (0)