diff options
Diffstat (limited to 'arch/mips/kernel/syscall.c')
| -rw-r--r-- | arch/mips/kernel/syscall.c | 32 |
1 files changed, 4 insertions, 28 deletions
diff --git a/arch/mips/kernel/syscall.c b/arch/mips/kernel/syscall.c index fe0d7980560..3f7f466190b 100644 --- a/arch/mips/kernel/syscall.c +++ b/arch/mips/kernel/syscall.c | |||
| @@ -93,7 +93,8 @@ unsigned long arch_get_unmapped_area(struct file *filp, unsigned long addr, | |||
| 93 | * We do not accept a shared mapping if it would violate | 93 | * We do not accept a shared mapping if it would violate |
| 94 | * cache aliasing constraints. | 94 | * cache aliasing constraints. |
| 95 | */ | 95 | */ |
| 96 | if ((flags & MAP_SHARED) && (addr & shm_align_mask)) | 96 | if ((flags & MAP_SHARED) && |
| 97 | ((addr - (pgoff << PAGE_SHIFT)) & shm_align_mask)) | ||
| 97 | return -EINVAL; | 98 | return -EINVAL; |
| 98 | return addr; | 99 | return addr; |
| 99 | } | 100 | } |
| @@ -129,31 +130,6 @@ unsigned long arch_get_unmapped_area(struct file *filp, unsigned long addr, | |||
| 129 | } | 130 | } |
| 130 | } | 131 | } |
| 131 | 132 | ||
| 132 | /* common code for old and new mmaps */ | ||
| 133 | static inline unsigned long | ||
| 134 | do_mmap2(unsigned long addr, unsigned long len, unsigned long prot, | ||
| 135 | unsigned long flags, unsigned long fd, unsigned long pgoff) | ||
| 136 | { | ||
| 137 | unsigned long error = -EBADF; | ||
| 138 | struct file * file = NULL; | ||
| 139 | |||
| 140 | flags &= ~(MAP_EXECUTABLE | MAP_DENYWRITE); | ||
| 141 | if (!(flags & MAP_ANONYMOUS)) { | ||
| 142 | file = fget(fd); | ||
| 143 | if (!file) | ||
| 144 | goto out; | ||
| 145 | } | ||
| 146 | |||
| 147 | down_write(¤t->mm->mmap_sem); | ||
| 148 | error = do_mmap_pgoff(file, addr, len, prot, flags, pgoff); | ||
| 149 | up_write(¤t->mm->mmap_sem); | ||
| 150 | |||
| 151 | if (file) | ||
| 152 | fput(file); | ||
| 153 | out: | ||
| 154 | return error; | ||
| 155 | } | ||
| 156 | |||
| 157 | SYSCALL_DEFINE6(mips_mmap, unsigned long, addr, unsigned long, len, | 133 | SYSCALL_DEFINE6(mips_mmap, unsigned long, addr, unsigned long, len, |
| 158 | unsigned long, prot, unsigned long, flags, unsigned long, | 134 | unsigned long, prot, unsigned long, flags, unsigned long, |
| 159 | fd, off_t, offset) | 135 | fd, off_t, offset) |
| @@ -164,7 +140,7 @@ SYSCALL_DEFINE6(mips_mmap, unsigned long, addr, unsigned long, len, | |||
| 164 | if (offset & ~PAGE_MASK) | 140 | if (offset & ~PAGE_MASK) |
| 165 | goto out; | 141 | goto out; |
| 166 | 142 | ||
| 167 | result = do_mmap2(addr, len, prot, flags, fd, offset >> PAGE_SHIFT); | 143 | result = sys_mmap_pgoff(addr, len, prot, flags, fd, offset >> PAGE_SHIFT); |
| 168 | 144 | ||
| 169 | out: | 145 | out: |
| 170 | return result; | 146 | return result; |
| @@ -177,7 +153,7 @@ SYSCALL_DEFINE6(mips_mmap2, unsigned long, addr, unsigned long, len, | |||
| 177 | if (pgoff & (~PAGE_MASK >> 12)) | 153 | if (pgoff & (~PAGE_MASK >> 12)) |
| 178 | return -EINVAL; | 154 | return -EINVAL; |
| 179 | 155 | ||
| 180 | return do_mmap2(addr, len, prot, flags, fd, pgoff >> (PAGE_SHIFT-12)); | 156 | return sys_mmap_pgoff(addr, len, prot, flags, fd, pgoff >> (PAGE_SHIFT-12)); |
| 181 | } | 157 | } |
| 182 | 158 | ||
| 183 | save_static_function(sys_fork); | 159 | save_static_function(sys_fork); |
