diff options
author | Martin Schwidefsky <schwidefsky@de.ibm.com> | 2007-04-27 10:01:40 -0400 |
---|---|---|
committer | Martin Schwidefsky <schwidefsky@de.ibm.com> | 2007-04-27 10:01:42 -0400 |
commit | 03ff9a235a0602724fc54916469b6e0939c62c9b (patch) | |
tree | 86ab2236897eb59542be2ccd667d6ca221153a44 /arch/s390/kernel/compat_signal.c | |
parent | ef99516c9646802c3d38c3eb83de302e05b3c1b5 (diff) |
[S390] System call cleanup.
Remove system call glue for sys_clone, sys_fork, sys_vfork, sys_execve,
sys_sigreturn, sys_rt_sigreturn and sys_sigaltstack. Call do_execve from
kernel_execve directly, move pt_regs to the right place and branch to
sysc_return to start the user space program. This removes the last
in-kernel system call.
Signed-off-by: Martin Schwidefsky <schwidefsky@de.ibm.com>
Signed-off-by: Heiko Carstens <heiko.carstens@de.ibm.com>
Diffstat (limited to 'arch/s390/kernel/compat_signal.c')
-rw-r--r-- | arch/s390/kernel/compat_signal.c | 14 |
1 files changed, 8 insertions, 6 deletions
diff --git a/arch/s390/kernel/compat_signal.c b/arch/s390/kernel/compat_signal.c index 887a9881d0d0..80a54a0149ab 100644 --- a/arch/s390/kernel/compat_signal.c +++ b/arch/s390/kernel/compat_signal.c | |||
@@ -255,9 +255,9 @@ sys32_rt_sigaction(int sig, const struct sigaction32 __user *act, | |||
255 | } | 255 | } |
256 | 256 | ||
257 | asmlinkage long | 257 | asmlinkage long |
258 | sys32_sigaltstack(const stack_t32 __user *uss, stack_t32 __user *uoss, | 258 | sys32_sigaltstack(const stack_t32 __user *uss, stack_t32 __user *uoss) |
259 | struct pt_regs *regs) | ||
260 | { | 259 | { |
260 | struct pt_regs *regs = task_pt_regs(current); | ||
261 | stack_t kss, koss; | 261 | stack_t kss, koss; |
262 | unsigned long ss_sp; | 262 | unsigned long ss_sp; |
263 | int ret, err = 0; | 263 | int ret, err = 0; |
@@ -344,8 +344,9 @@ static int restore_sigregs32(struct pt_regs *regs,_sigregs32 __user *sregs) | |||
344 | return 0; | 344 | return 0; |
345 | } | 345 | } |
346 | 346 | ||
347 | asmlinkage long sys32_sigreturn(struct pt_regs *regs) | 347 | asmlinkage long sys32_sigreturn(void) |
348 | { | 348 | { |
349 | struct pt_regs *regs = task_pt_regs(current); | ||
349 | sigframe32 __user *frame = (sigframe32 __user *)regs->gprs[15]; | 350 | sigframe32 __user *frame = (sigframe32 __user *)regs->gprs[15]; |
350 | sigset_t set; | 351 | sigset_t set; |
351 | 352 | ||
@@ -370,8 +371,9 @@ badframe: | |||
370 | return 0; | 371 | return 0; |
371 | } | 372 | } |
372 | 373 | ||
373 | asmlinkage long sys32_rt_sigreturn(struct pt_regs *regs) | 374 | asmlinkage long sys32_rt_sigreturn(void) |
374 | { | 375 | { |
376 | struct pt_regs *regs = task_pt_regs(current); | ||
375 | rt_sigframe32 __user *frame = (rt_sigframe32 __user *)regs->gprs[15]; | 377 | rt_sigframe32 __user *frame = (rt_sigframe32 __user *)regs->gprs[15]; |
376 | sigset_t set; | 378 | sigset_t set; |
377 | stack_t st; | 379 | stack_t st; |
@@ -407,8 +409,8 @@ asmlinkage long sys32_rt_sigreturn(struct pt_regs *regs) | |||
407 | return regs->gprs[2]; | 409 | return regs->gprs[2]; |
408 | 410 | ||
409 | badframe: | 411 | badframe: |
410 | force_sig(SIGSEGV, current); | 412 | force_sig(SIGSEGV, current); |
411 | return 0; | 413 | return 0; |
412 | } | 414 | } |
413 | 415 | ||
414 | /* | 416 | /* |