]> bbs.cooldavid.org Git - net-next-2.6.git/commitdiff
[S390] Convert sys_clone to function with parameters.
authorHeiko Carstens <heiko.carstens@de.ibm.com>
Tue, 22 Sep 2009 20:58:41 +0000 (22:58 +0200)
committerMartin Schwidefsky <schwidefsky@de.ibm.com>
Tue, 22 Sep 2009 20:58:43 +0000 (22:58 +0200)
Use function parameters instead of accessing the pt_regs structure
to get the parameters.
Also merge the 31 and 64 bit versions since they are identical.

Signed-off-by: Heiko Carstens <heiko.carstens@de.ibm.com>
Signed-off-by: Martin Schwidefsky <schwidefsky@de.ibm.com>
arch/s390/kernel/compat_linux.c
arch/s390/kernel/compat_linux.h
arch/s390/kernel/compat_wrapper.S
arch/s390/kernel/entry.h
arch/s390/kernel/process.c
arch/s390/kernel/syscalls.S

index 9ab188d67a3d872df26095cf15e530afaed2a31d..f741cd49111a2fabc68d39a5ae0881407a2794bf 100644 (file)
@@ -801,23 +801,6 @@ asmlinkage long sys32_write(unsigned int fd, char __user * buf, size_t count)
        return sys_write(fd, buf, count);
 }
 
-asmlinkage long sys32_clone(void)
-{
-       struct pt_regs *regs = task_pt_regs(current);
-       unsigned long clone_flags;
-       unsigned long newsp;
-       int __user *parent_tidptr, *child_tidptr;
-
-       clone_flags = regs->gprs[3] & 0xffffffffUL;
-       newsp = regs->orig_gpr2 & 0x7fffffffUL;
-       parent_tidptr = compat_ptr(regs->gprs[4]);
-       child_tidptr = compat_ptr(regs->gprs[5]);
-       if (!newsp)
-               newsp = regs->gprs[15];
-       return do_fork(clone_flags, newsp, regs, 0,
-                      parent_tidptr, child_tidptr);
-}
-
 /*
  * 31 bit emulation wrapper functions for sys_fadvise64/fadvise64_64.
  * These need to rewrite the advise values for POSIX_FADV_{DONTNEED,NOREUSE}
index 836a28842900eee9b6c6e1f038a9a6d124e55707..7cceb67ff8a249e0fd200028ef22a384188e237f 100644 (file)
@@ -222,7 +222,6 @@ unsigned long old32_mmap(struct mmap_arg_struct_emu31 __user *arg);
 long sys32_mmap2(struct mmap_arg_struct_emu31 __user *arg);
 long sys32_read(unsigned int fd, char __user * buf, size_t count);
 long sys32_write(unsigned int fd, char __user * buf, size_t count);
-long sys32_clone(void);
 long sys32_fadvise64(int fd, loff_t offset, size_t len, int advise);
 long sys32_fadvise64_64(struct fadvise64_64_args __user *args);
 long sys32_sigaction(int sig, const struct old_sigaction32 __user *act,
index 624790042d41077c99e1f90f895178ab2d5bf3a8..28f8440d2ec3be58d796d9d56c646a024483e5ec 100644 (file)
@@ -1840,3 +1840,11 @@ sys_perf_event_open_wrapper:
        lgfr    %r5,%r5                 # int
        llgfr   %r6,%r6                 # unsigned long
        jg      sys_perf_event_open     # branch to system call
+
+       .globl  sys_clone_wrapper
+sys_clone_wrapper:
+       llgfr   %r2,%r2                 # unsigned long
+       llgfr   %r3,%r3                 # unsigned long
+       llgtr   %r4,%r4                 # int *
+       llgtr   %r5,%r5                 # int *
+       jg      sys_clone               # branch to system call
index 950c59c6688bf2cc3f6e2157f6115b5180f5b188..91fd78839c57dfd57c20cf2380d31ad051dea4d4 100644 (file)
@@ -42,7 +42,8 @@ long sys_s390_fadvise64_64(struct fadvise64_64_args __user *args);
 long sys_s390_fallocate(int fd, int mode, loff_t offset, u32 len_high,
                        u32 len_low);
 long sys_fork(void);
-long sys_clone(void);
+long sys_clone(unsigned long newsp, unsigned long clone_flags,
+              int __user *parent_tidptr, int __user *child_tidptr);
 long sys_vfork(void);
 void execve_tail(void);
 long sys_execve(void);
index 5a43f27eec13eafd4ecf36d4c5c82fd4f533e349..189d978f76d63b7fefd0883a28eb7bca594e9970 100644 (file)
@@ -230,17 +230,11 @@ SYSCALL_DEFINE0(fork)
        return do_fork(SIGCHLD, regs->gprs[15], regs, 0, NULL, NULL);
 }
 
-SYSCALL_DEFINE0(clone)
+SYSCALL_DEFINE4(clone, unsigned long, newsp, unsigned long, clone_flags,
+               int __user *, parent_tidptr, int __user *, child_tidptr)
 {
        struct pt_regs *regs = task_pt_regs(current);
-       unsigned long clone_flags;
-       unsigned long newsp;
-       int __user *parent_tidptr, *child_tidptr;
 
-       clone_flags = regs->gprs[3];
-       newsp = regs->orig_gpr2;
-       parent_tidptr = (int __user *) regs->gprs[4];
-       child_tidptr = (int __user *) regs->gprs[5];
        if (!newsp)
                newsp = regs->gprs[15];
        return do_fork(clone_flags, newsp, regs, 0,
index 0b5083681e770812ef6142f2ecded3bc40bbc77c..ff79d58e0eb393d8a89f76bff4271384b5f94001 100644 (file)
@@ -128,7 +128,7 @@ SYSCALL(sys_sysinfo,sys_sysinfo,compat_sys_sysinfo_wrapper)
 SYSCALL(sys_ipc,sys_ipc,sys32_ipc_wrapper)
 SYSCALL(sys_fsync,sys_fsync,sys32_fsync_wrapper)
 SYSCALL(sys_sigreturn,sys_sigreturn,sys32_sigreturn)
-SYSCALL(sys_clone,sys_clone,sys32_clone)                       /* 120 */
+SYSCALL(sys_clone,sys_clone,sys_clone_wrapper)                 /* 120 */
 SYSCALL(sys_setdomainname,sys_setdomainname,sys32_setdomainname_wrapper)
 SYSCALL(sys_newuname,sys_s390_newuname,sys32_newuname_wrapper)
 NI_SYSCALL                                                     /* modify_ldt for i386 */