X-Git-Url: http://pilppa.org/gitweb/gitweb.cgi?a=blobdiff_plain;f=arch%2Fparisc%2Fkernel%2Fsys_parisc.c;h=4f589216b39e2a47864ea83ca897a859e2a8f3cb;hb=01ba2bdc6b639764745ff678caf3fb9e5bcd745a;hp=8b5df98e2b3158a229226cdb233e43349c950e4c;hpb=36a557d1f48669c57f59e37d9334400a29e4e53c;p=linux-2.6-omap-h63xx.git diff --git a/arch/parisc/kernel/sys_parisc.c b/arch/parisc/kernel/sys_parisc.c index 8b5df98e2b3..4f589216b39 100644 --- a/arch/parisc/kernel/sys_parisc.c +++ b/arch/parisc/kernel/sys_parisc.c @@ -29,8 +29,9 @@ #include #include #include -#include #include +#include +#include int sys_pipe(int __user *fildes) { @@ -104,6 +105,11 @@ unsigned long arch_get_unmapped_area(struct file *filp, unsigned long addr, { if (len > TASK_SIZE) return -ENOMEM; + /* Might want to check for cache aliasing issues for MAP_FIXED case + * like ARM or MIPS ??? --BenH. + */ + if (flags & MAP_FIXED) + return addr; if (!addr) addr = TASK_UNMAPPED_BASE; @@ -248,3 +254,33 @@ asmlinkage int sys_free_hugepages(unsigned long addr) { return -EINVAL; } + +long parisc_personality(unsigned long personality) +{ + long err; + + if (personality(current->personality) == PER_LINUX32 + && personality == PER_LINUX) + personality = PER_LINUX32; + + err = sys_personality(personality); + if (err == PER_LINUX32) + err = PER_LINUX; + + return err; +} + +long parisc_newuname(struct new_utsname __user *name) +{ + int err = sys_newuname(name); + +#ifdef CONFIG_COMPAT + if (!err && personality(current->personality) == PER_LINUX32) { + if (__put_user(0, name->machine + 6) || + __put_user(0, name->machine + 7)) + err = -EFAULT; + } +#endif + + return err; +}