This commit was manufactured by cvs2svn to create branch
[linux-2.6.git] / arch / um / kernel / syscall_kern.c
index 2af5fc2..cec6e63 100644 (file)
@@ -1,5 +1,5 @@
 /* 
- * Copyright (C) 2000 Jeff Dike (jdike@karaya.com)
+ * Copyright (C) 2000 - 2003 Jeff Dike (jdike@addtoit.com)
  * Licensed under the GPL
  */
 
@@ -15,6 +15,8 @@
 #include "linux/unistd.h"
 #include "linux/slab.h"
 #include "linux/utime.h"
+#include <linux/vs_cvirt.h>
+
 #include "asm/mman.h"
 #include "asm/uaccess.h"
 #include "asm/ipc.h"
@@ -36,39 +38,40 @@ long um_mount(char * dev_name, char * dir_name, char * type,
 
 long sys_fork(void)
 {
-       struct task_struct *p;
+       long ret;
 
        current->thread.forking = 1;
-        p = do_fork(SIGCHLD, 0, NULL, 0, NULL, NULL);
+        ret = do_fork(SIGCHLD, 0, NULL, 0, NULL, NULL);
        current->thread.forking = 0;
-       return(IS_ERR(p) ? PTR_ERR(p) : p->pid);
+       return(ret);
 }
 
-long sys_clone(unsigned long clone_flags, unsigned long newsp)
+long sys_clone(unsigned long clone_flags, unsigned long newsp, 
+              int *parent_tid, int *child_tid)
 {
-       struct task_struct *p;
+       long ret;
 
        current->thread.forking = 1;
-       p = do_fork(clone_flags, newsp, NULL, 0, NULL, NULL);
+       ret = do_fork(clone_flags, newsp, NULL, 0, parent_tid, child_tid);
        current->thread.forking = 0;
-       return(IS_ERR(p) ? PTR_ERR(p) : p->pid);
+       return(ret);
 }
 
 long sys_vfork(void)
 {
-       struct task_struct *p;
+       long ret;
 
        current->thread.forking = 1;
-       p = do_fork(CLONE_VFORK | CLONE_VM | SIGCHLD, 0, NULL, 0, NULL, NULL);
+       ret = do_fork(CLONE_VFORK | CLONE_VM | SIGCHLD, 0, NULL, 0, NULL, 
+                     NULL);
        current->thread.forking = 0;
-       return(IS_ERR(p) ? PTR_ERR(p) : p->pid);
+       return(ret);
 }
 
 /* common code for old and new mmaps */
-static inline long do_mmap2(
-       unsigned long addr, unsigned long len,
-       unsigned long prot, unsigned long flags,
-       unsigned long fd, unsigned long pgoff)
+long do_mmap2(struct mm_struct *mm, unsigned long addr, unsigned long len,
+             unsigned long prot, unsigned long flags, unsigned long fd,
+             unsigned long pgoff)
 {
        int error = -EBADF;
        struct file * file = NULL;
@@ -80,9 +83,9 @@ static inline long do_mmap2(
                        goto out;
        }
 
-       down_write(&current->mm->mmap_sem);
-       error = do_mmap_pgoff(file, addr, len, prot, flags, pgoff);
-       up_write(&current->mm->mmap_sem);
+       down_write(&mm->mmap_sem);
+       error = do_mmap_pgoff(mm, file, addr, len, prot, flags, pgoff);
+       up_write(&mm->mmap_sem);
 
        if (file)
                fput(file);
@@ -94,7 +97,7 @@ long sys_mmap2(unsigned long addr, unsigned long len,
               unsigned long prot, unsigned long flags,
               unsigned long fd, unsigned long pgoff)
 {
-       return do_mmap2(addr, len, prot, flags, fd, pgoff);
+       return do_mmap2(current->mm, addr, len, prot, flags, fd, pgoff);
 }
 
 /*
@@ -121,7 +124,8 @@ int old_mmap(unsigned long addr, unsigned long len,
        if (offset & ~PAGE_MASK)
                goto out;
 
-       err = do_mmap2(addr, len, prot, flags, fd, offset >> PAGE_SHIFT);
+       err = do_mmap2(current->mm, addr, len, prot, flags, fd, 
+                      offset >> PAGE_SHIFT);
  out:
        return err;
 }
@@ -136,43 +140,12 @@ int sys_pipe(unsigned long * fildes)
 
         error = do_pipe(fd);
         if (!error) {
-                if (copy_to_user(fildes, fd, 2*sizeof(int)))
+               if (copy_to_user(fildes, fd, sizeof(fd)))
                         error = -EFAULT;
         }
         return error;
 }
 
-int sys_sigaction(int sig, const struct old_sigaction *act,
-                        struct old_sigaction *oact)
-{
-       struct k_sigaction new_ka, old_ka;
-       int ret;
-
-       if (act) {
-               old_sigset_t mask;
-               if (verify_area(VERIFY_READ, act, sizeof(*act)) ||
-                   __get_user(new_ka.sa.sa_handler, &act->sa_handler) ||
-                   __get_user(new_ka.sa.sa_restorer, &act->sa_restorer))
-                       return -EFAULT;
-               __get_user(new_ka.sa.sa_flags, &act->sa_flags);
-               __get_user(mask, &act->sa_mask);
-               siginitset(&new_ka.sa.sa_mask, mask);
-       }
-
-       ret = do_sigaction(sig, act ? &new_ka : NULL, oact ? &old_ka : NULL);
-
-       if (!ret && oact) {
-               if (verify_area(VERIFY_WRITE, oact, sizeof(*oact)) ||
-                   __put_user(old_ka.sa.sa_handler, &oact->sa_handler) ||
-                   __put_user(old_ka.sa.sa_restorer, &oact->sa_restorer))
-                       return -EFAULT;
-               __put_user(old_ka.sa.sa_flags, &oact->sa_flags);
-               __put_user(old_ka.sa.sa_mask.sig[0], &oact->sa_mask);
-       }
-
-       return ret;
-}
-
 /*
  * sys_ipc() is the de-multiplexer for the SysV IPC calls..
  *
@@ -254,7 +227,7 @@ int sys_ipc (uint call, int first, int second,
                return sys_shmctl (first, second,
                                   (struct shmid_ds *) ptr);
        default:
-               return -EINVAL;
+               return -ENOSYS;
        }
 }
 
@@ -264,7 +237,7 @@ int sys_uname(struct old_utsname * name)
        if (!name)
                return -EFAULT;
        down_read(&uts_sem);
-       err=copy_to_user(name, &system_utsname, sizeof (*name));
+       err=copy_to_user(name, vx_new_utsname(), sizeof (*name));
        up_read(&uts_sem);
        return err?-EFAULT:0;
 }
@@ -272,6 +245,7 @@ int sys_uname(struct old_utsname * name)
 int sys_olduname(struct oldold_utsname * name)
 {
        int error;
+       struct new_utsname *ptr;
 
        if (!name)
                return -EFAULT;
@@ -280,19 +254,20 @@ int sys_olduname(struct oldold_utsname * name)
   
        down_read(&uts_sem);
        
-       error = __copy_to_user(&name->sysname,&system_utsname.sysname,
+       ptr = vx_new_utsname();
+       error = __copy_to_user(&name->sysname,ptr->sysname,
                               __OLD_UTS_LEN);
        error |= __put_user(0,name->sysname+__OLD_UTS_LEN);
-       error |= __copy_to_user(&name->nodename,&system_utsname.nodename,
+       error |= __copy_to_user(&name->nodename,ptr->nodename,
                                __OLD_UTS_LEN);
        error |= __put_user(0,name->nodename+__OLD_UTS_LEN);
-       error |= __copy_to_user(&name->release,&system_utsname.release,
+       error |= __copy_to_user(&name->release,ptr->release,
                                __OLD_UTS_LEN);
        error |= __put_user(0,name->release+__OLD_UTS_LEN);
-       error |= __copy_to_user(&name->version,&system_utsname.version,
+       error |= __copy_to_user(&name->version,ptr->version,
                                __OLD_UTS_LEN);
        error |= __put_user(0,name->version+__OLD_UTS_LEN);
-       error |= __copy_to_user(&name->machine,&system_utsname.machine,
+       error |= __copy_to_user(&name->machine,ptr->machine,
                                __OLD_UTS_LEN);
        error |= __put_user(0,name->machine+__OLD_UTS_LEN);
        
@@ -303,11 +278,6 @@ int sys_olduname(struct oldold_utsname * name)
        return error;
 }
 
-int sys_sigaltstack(const stack_t *uss, stack_t *uoss)
-{
-       return(do_sigaltstack(uss, uoss, PT_REGS_SP(&current->thread.regs)));
-}
-
 long execute_syscall(void *r)
 {
        return(CHOOSE_MODE_PROC(execute_syscall_tt, execute_syscall_skas, r));