]> pilppa.org Git - linux-2.6-omap-h63xx.git/blobdiff - arch/ppc64/kernel/syscalls.c
Merge master.kernel.org:/pub/scm/linux/kernel/git/dtor/input
[linux-2.6-omap-h63xx.git] / arch / ppc64 / kernel / syscalls.c
index f2865ff8d2f93863c1d8eb4416f02a82e9a68ad2..05f16633bd2c8c0176cdc7611b6f62a2b4617c0a 100644 (file)
 
 extern unsigned long wall_jiffies;
 
-void
-check_bugs(void)
-{
-}
 
 /*
  * sys_ipc() is the de-multiplexer for the SysV IPC calls..
@@ -199,24 +195,33 @@ out:
        return ret;
 }
 
-static int __init set_fakeppc(char *str)
+long ppc64_personality(unsigned long personality)
 {
-       if (*str)
-               return 0;
-       init_task.personality = PER_LINUX32;
-       return 1;
+       long ret;
+
+       if (personality(current->personality) == PER_LINUX32
+           && personality == PER_LINUX)
+               personality = PER_LINUX32;
+       ret = sys_personality(personality);
+       if (ret == PER_LINUX32)
+               ret = PER_LINUX;
+       return ret;
 }
-__setup("fakeppc", set_fakeppc);
 
-asmlinkage int sys_uname(struct old_utsname __user * name)
+long ppc64_newuname(struct new_utsname __user * name)
 {
-       int err = -EFAULT;
-       
+       int err = 0;
+
        down_read(&uts_sem);
-       if (name && !copy_to_user(name, &system_utsname, sizeof (*name)))
-               err = 0;
+       if (copy_to_user(name, &system_utsname, sizeof(*name)))
+               err = -EFAULT;
        up_read(&uts_sem);
-       
+       if (!err && personality(current->personality) == PER_LINUX32) {
+               /* change ppc64 to ppc */
+               if (__put_user(0, name->machine + 3)
+                   || __put_user(0, name->machine + 4))
+                       err = -EFAULT;
+       }
        return err;
 }