diff options
Diffstat (limited to 'arch/sparc/kernel/sys_sparc_32.c')
| -rw-r--r-- | arch/sparc/kernel/sys_sparc_32.c | 64 |
1 files changed, 6 insertions, 58 deletions
diff --git a/arch/sparc/kernel/sys_sparc_32.c b/arch/sparc/kernel/sys_sparc_32.c index 03035c852a43..3a82e65d8db2 100644 --- a/arch/sparc/kernel/sys_sparc_32.c +++ b/arch/sparc/kernel/sys_sparc_32.c | |||
| @@ -45,7 +45,8 @@ unsigned long arch_get_unmapped_area(struct file *filp, unsigned long addr, unsi | |||
| 45 | /* We do not accept a shared mapping if it would violate | 45 | /* We do not accept a shared mapping if it would violate |
| 46 | * cache aliasing constraints. | 46 | * cache aliasing constraints. |
| 47 | */ | 47 | */ |
| 48 | if ((flags & MAP_SHARED) && (addr & (SHMLBA - 1))) | 48 | if ((flags & MAP_SHARED) && |
| 49 | ((addr - (pgoff << PAGE_SHIFT)) & (SHMLBA - 1))) | ||
| 49 | return -EINVAL; | 50 | return -EINVAL; |
| 50 | return addr; | 51 | return addr; |
| 51 | } | 52 | } |
| @@ -79,15 +80,6 @@ unsigned long arch_get_unmapped_area(struct file *filp, unsigned long addr, unsi | |||
| 79 | } | 80 | } |
| 80 | } | 81 | } |
| 81 | 82 | ||
| 82 | asmlinkage unsigned long sparc_brk(unsigned long brk) | ||
| 83 | { | ||
| 84 | if(ARCH_SUN4C) { | ||
| 85 | if ((brk & 0xe0000000) != (current->mm->brk & 0xe0000000)) | ||
| 86 | return current->mm->brk; | ||
| 87 | } | ||
| 88 | return sys_brk(brk); | ||
| 89 | } | ||
| 90 | |||
| 91 | /* | 83 | /* |
| 92 | * sys_pipe() is the normal C calling standard for creating | 84 | * sys_pipe() is the normal C calling standard for creating |
| 93 | * a pipe. It's not the way unix traditionally does this, though. | 85 | * a pipe. It's not the way unix traditionally does this, though. |
| @@ -234,31 +226,6 @@ int sparc_mmap_check(unsigned long addr, unsigned long len) | |||
| 234 | } | 226 | } |
| 235 | 227 | ||
| 236 | /* Linux version of mmap */ | 228 | /* Linux version of mmap */ |
| 237 | static unsigned long do_mmap2(unsigned long addr, unsigned long len, | ||
| 238 | unsigned long prot, unsigned long flags, unsigned long fd, | ||
| 239 | unsigned long pgoff) | ||
| 240 | { | ||
| 241 | struct file * file = NULL; | ||
| 242 | unsigned long retval = -EBADF; | ||
| 243 | |||
| 244 | if (!(flags & MAP_ANONYMOUS)) { | ||
| 245 | file = fget(fd); | ||
| 246 | if (!file) | ||
| 247 | goto out; | ||
| 248 | } | ||
| 249 | |||
| 250 | len = PAGE_ALIGN(len); | ||
| 251 | flags &= ~(MAP_EXECUTABLE | MAP_DENYWRITE); | ||
| 252 | |||
| 253 | down_write(¤t->mm->mmap_sem); | ||
| 254 | retval = do_mmap_pgoff(file, addr, len, prot, flags, pgoff); | ||
| 255 | up_write(¤t->mm->mmap_sem); | ||
| 256 | |||
| 257 | if (file) | ||
| 258 | fput(file); | ||
| 259 | out: | ||
| 260 | return retval; | ||
| 261 | } | ||
| 262 | 229 | ||
| 263 | asmlinkage unsigned long sys_mmap2(unsigned long addr, unsigned long len, | 230 | asmlinkage unsigned long sys_mmap2(unsigned long addr, unsigned long len, |
| 264 | unsigned long prot, unsigned long flags, unsigned long fd, | 231 | unsigned long prot, unsigned long flags, unsigned long fd, |
| @@ -266,14 +233,16 @@ asmlinkage unsigned long sys_mmap2(unsigned long addr, unsigned long len, | |||
| 266 | { | 233 | { |
| 267 | /* Make sure the shift for mmap2 is constant (12), no matter what PAGE_SIZE | 234 | /* Make sure the shift for mmap2 is constant (12), no matter what PAGE_SIZE |
| 268 | we have. */ | 235 | we have. */ |
| 269 | return do_mmap2(addr, len, prot, flags, fd, pgoff >> (PAGE_SHIFT - 12)); | 236 | return sys_mmap_pgoff(addr, len, prot, flags, fd, |
| 237 | pgoff >> (PAGE_SHIFT - 12)); | ||
| 270 | } | 238 | } |
| 271 | 239 | ||
| 272 | asmlinkage unsigned long sys_mmap(unsigned long addr, unsigned long len, | 240 | asmlinkage unsigned long sys_mmap(unsigned long addr, unsigned long len, |
| 273 | unsigned long prot, unsigned long flags, unsigned long fd, | 241 | unsigned long prot, unsigned long flags, unsigned long fd, |
| 274 | unsigned long off) | 242 | unsigned long off) |
| 275 | { | 243 | { |
| 276 | return do_mmap2(addr, len, prot, flags, fd, off >> PAGE_SHIFT); | 244 | /* no alignment check? */ |
| 245 | return sys_mmap_pgoff(addr, len, prot, flags, fd, off >> PAGE_SHIFT); | ||
| 277 | } | 246 | } |
| 278 | 247 | ||
| 279 | long sparc_remap_file_pages(unsigned long start, unsigned long size, | 248 | long sparc_remap_file_pages(unsigned long start, unsigned long size, |
| @@ -287,27 +256,6 @@ long sparc_remap_file_pages(unsigned long start, unsigned long size, | |||
| 287 | (pgoff >> (PAGE_SHIFT - 12)), flags); | 256 | (pgoff >> (PAGE_SHIFT - 12)), flags); |
| 288 | } | 257 | } |
| 289 | 258 | ||
| 290 | extern unsigned long do_mremap(unsigned long addr, | ||
| 291 | unsigned long old_len, unsigned long new_len, | ||
| 292 | unsigned long flags, unsigned long new_addr); | ||
| 293 | |||
| 294 | asmlinkage unsigned long sparc_mremap(unsigned long addr, | ||
| 295 | unsigned long old_len, unsigned long new_len, | ||
| 296 | unsigned long flags, unsigned long new_addr) | ||
| 297 | { | ||
| 298 | unsigned long ret = -EINVAL; | ||
| 299 | |||
| 300 | if (unlikely(sparc_mmap_check(addr, old_len))) | ||
| 301 | goto out; | ||
| 302 | if (unlikely(sparc_mmap_check(new_addr, new_len))) | ||
| 303 | goto out; | ||
| 304 | down_write(¤t->mm->mmap_sem); | ||
| 305 | ret = do_mremap(addr, old_len, new_len, flags, new_addr); | ||
| 306 | up_write(¤t->mm->mmap_sem); | ||
| 307 | out: | ||
| 308 | return ret; | ||
| 309 | } | ||
| 310 | |||
| 311 | /* we come to here via sys_nis_syscall so it can setup the regs argument */ | 259 | /* we come to here via sys_nis_syscall so it can setup the regs argument */ |
| 312 | asmlinkage unsigned long | 260 | asmlinkage unsigned long |
| 313 | c_sys_nis_syscall (struct pt_regs *regs) | 261 | c_sys_nis_syscall (struct pt_regs *regs) |
