]> pilppa.org Git - linux-2.6-omap-h63xx.git/blobdiff - arch/sparc/kernel/sys_sparc.c
Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/net-2.6
[linux-2.6-omap-h63xx.git] / arch / sparc / kernel / sys_sparc.c
index f188b5dc9fd001bec3691b03401408b5af655ce4..4d73421559c3aa1c62c79b77210fdabc9f5497fb 100644 (file)
@@ -97,7 +97,7 @@ asmlinkage int sparc_pipe(struct pt_regs *regs)
        int fd[2];
        int error;
 
-       error = do_pipe(fd);
+       error = do_pipe_flags(fd, 0);
        if (error)
                goto out;
        regs->u_regs[UREG_I1] = fd[1];
@@ -219,12 +219,11 @@ out:
        return err;
 }
 
-int sparc_mmap_check(unsigned long addr, unsigned long len, unsigned long flags)
+int sparc_mmap_check(unsigned long addr, unsigned long len)
 {
        if (ARCH_SUN4C_SUN4 &&
            (len > 0x20000000 ||
-            ((flags & MAP_FIXED) &&
-             addr < 0xe0000000 && addr + len > 0x20000000)))
+            (addr < 0xe0000000 && addr + len > 0x20000000)))
                return -EINVAL;
 
        /* See asm-sparc/uaccess.h */
@@ -296,52 +295,14 @@ asmlinkage unsigned long sparc_mremap(unsigned long addr,
        unsigned long old_len, unsigned long new_len,
        unsigned long flags, unsigned long new_addr)
 {
-       struct vm_area_struct *vma;
        unsigned long ret = -EINVAL;
-       if (ARCH_SUN4C_SUN4) {
-               if (old_len > 0x20000000 || new_len > 0x20000000)
-                       goto out;
-               if (addr < 0xe0000000 && addr + old_len > 0x20000000)
-                       goto out;
-       }
-       if (old_len > TASK_SIZE - PAGE_SIZE ||
-           new_len > TASK_SIZE - PAGE_SIZE)
+
+       if (unlikely(sparc_mmap_check(addr, old_len)))
+               goto out;
+       if (unlikely(sparc_mmap_check(new_addr, new_len)))
                goto out;
        down_write(&current->mm->mmap_sem);
-       if (flags & MREMAP_FIXED) {
-               if (ARCH_SUN4C_SUN4 &&
-                   new_addr < 0xe0000000 &&
-                   new_addr + new_len > 0x20000000)
-                       goto out_sem;
-               if (new_addr + new_len > TASK_SIZE - PAGE_SIZE)
-                       goto out_sem;
-       } else if ((ARCH_SUN4C_SUN4 && addr < 0xe0000000 &&
-                   addr + new_len > 0x20000000) ||
-                  addr + new_len > TASK_SIZE - PAGE_SIZE) {
-               unsigned long map_flags = 0;
-               struct file *file = NULL;
-
-               ret = -ENOMEM;
-               if (!(flags & MREMAP_MAYMOVE))
-                       goto out_sem;
-
-               vma = find_vma(current->mm, addr);
-               if (vma) {
-                       if (vma->vm_flags & VM_SHARED)
-                               map_flags |= MAP_SHARED;
-                       file = vma->vm_file;
-               }
-
-               new_addr = get_unmapped_area(file, addr, new_len,
-                                    vma ? vma->vm_pgoff : 0,
-                                    map_flags);
-               ret = new_addr;
-               if (new_addr & ~PAGE_MASK)
-                       goto out_sem;
-               flags |= MREMAP_FIXED;
-       }
        ret = do_mremap(addr, old_len, new_len, flags, new_addr);
-out_sem:
        up_write(&current->mm->mmap_sem);
 out:
        return ret;