diff options
Diffstat (limited to 'sys/vm/vm_mmap.c')
-rw-r--r-- | sys/vm/vm_mmap.c | 335 |
1 files changed, 169 insertions, 166 deletions
diff --git a/sys/vm/vm_mmap.c b/sys/vm/vm_mmap.c index 5afece8..4b3027c 100644 --- a/sys/vm/vm_mmap.c +++ b/sys/vm/vm_mmap.c @@ -38,7 +38,7 @@ * from: Utah $Hdr: vm_mmap.c 1.6 91/10/21$ * * @(#)vm_mmap.c 8.4 (Berkeley) 1/12/94 - * $Id: vm_mmap.c,v 1.6 1994/09/02 15:06:51 davidg Exp $ + * $Id: vm_mmap.c,v 1.7 1994/10/09 01:52:11 phk Exp $ */ /* @@ -63,6 +63,7 @@ #ifdef DEBUG int mmapdebug = 0; + #define MDB_FOLLOW 0x01 #define MDB_SYNC 0x02 #define MDB_MAPIT 0x04 @@ -71,8 +72,9 @@ int mmapdebug = 0; void pmap_object_init_pt(); struct sbrk_args { - int incr; + int incr; }; + /* ARGSUSED */ int sbrk(p, uap, retval) @@ -86,8 +88,9 @@ sbrk(p, uap, retval) } struct sstk_args { - int incr; + int incr; }; + /* ARGSUSED */ int sstk(p, uap, retval) @@ -102,8 +105,9 @@ sstk(p, uap, retval) #if defined(COMPAT_43) || defined(COMPAT_SUNOS) struct getpagesize_args { - int dummy; + int dummy; }; + /* ARGSUSED */ int ogetpagesize(p, uap, retval) @@ -115,16 +119,16 @@ ogetpagesize(p, uap, retval) *retval = PAGE_SIZE; return (0); } -#endif /* COMPAT_43 || COMPAT_SUNOS */ +#endif /* COMPAT_43 || COMPAT_SUNOS */ struct mmap_args { - caddr_t addr; - size_t len; - int prot; - int flags; - int fd; - long pad; - off_t pos; + caddr_t addr; + size_t len; + int prot; + int flags; + int fd; + long pad; + off_t pos; }; int @@ -147,21 +151,21 @@ mmap(p, uap, retval) #ifdef DEBUG if (mmapdebug & MDB_FOLLOW) printf("mmap(%d): addr %x len %x pro %x flg %x fd %d pos %x\n", - p->p_pid, uap->addr, uap->len, prot, - flags, uap->fd, (vm_offset_t)uap->pos); + p->p_pid, uap->addr, uap->len, prot, + flags, uap->fd, (vm_offset_t) uap->pos); #endif /* - * Address (if FIXED) must be page aligned. - * Size is implicitly rounded to a page boundary. + * Address (if FIXED) must be page aligned. Size is implicitly rounded + * to a page boundary. */ addr = (vm_offset_t) uap->addr; if (((flags & MAP_FIXED) && (addr & PAGE_MASK)) || - (ssize_t)uap->len < 0 || ((flags & MAP_ANON) && uap->fd != -1)) + (ssize_t) uap->len < 0 || ((flags & MAP_ANON) && uap->fd != -1)) return (EINVAL); size = (vm_size_t) round_page(uap->len); /* - * Check for illegal addresses. Watch out for address wrap... - * Note that VM_*_ADDRESS are not constants due to casts (argh). + * Check for illegal addresses. Watch out for address wrap... Note + * that VM_*_ADDRESS are not constants due to casts (argh). */ if (flags & MAP_FIXED) { if (VM_MAXUSER_ADDRESS > 0 && addr + size > VM_MAXUSER_ADDRESS) @@ -174,11 +178,10 @@ mmap(p, uap, retval) return (EINVAL); } /* - * XXX if no hint provided for a non-fixed mapping place it after - * the end of the largest possible heap. - * - * There should really be a pmap call to determine a reasonable - * location. + * XXX if no hint provided for a non-fixed mapping place it after the + * end of the largest possible heap. + * + * There should really be a pmap call to determine a reasonable location. */ if (addr == 0 && (flags & MAP_FIXED) == 0) addr = round_page(p->p_vmspace->vm_daddr + MAXDSIZ); @@ -190,20 +193,20 @@ mmap(p, uap, retval) maxprot = VM_PROT_ALL; } else { /* - * Mapping file, get fp for validation. - * Obtain vnode and make sure it is of appropriate type. + * Mapping file, get fp for validation. Obtain vnode and make + * sure it is of appropriate type. */ - if (((unsigned)uap->fd) >= fdp->fd_nfiles || + if (((unsigned) uap->fd) >= fdp->fd_nfiles || (fp = fdp->fd_ofiles[uap->fd]) == NULL) return (EBADF); if (fp->f_type != DTYPE_VNODE) return (EINVAL); - vp = (struct vnode *)fp->f_data; + vp = (struct vnode *) fp->f_data; if (vp->v_type != VREG && vp->v_type != VCHR) return (EINVAL); /* - * XXX hack to handle use of /dev/zero to map anon - * memory (ala SunOS). + * XXX hack to handle use of /dev/zero to map anon memory (ala + * SunOS). */ if (vp->v_type == VCHR && iszerodev(vp->v_rdev)) { handle = NULL; @@ -216,8 +219,8 @@ mmap(p, uap, retval) * writability if mapping is shared; in this case, * current and max prot are dictated by the open file. * XXX use the vnode instead? Problem is: what - * credentials do we use for determination? - * What if proc does a setuid? + * credentials do we use for determination? What if + * proc does a setuid? */ maxprot = VM_PROT_EXECUTE; /* ??? */ if (fp->f_flag & FREAD) @@ -231,24 +234,24 @@ mmap(p, uap, retval) return (EACCES); } else maxprot |= VM_PROT_WRITE; - handle = (caddr_t)vp; + handle = (caddr_t) vp; } } error = vm_mmap(&p->p_vmspace->vm_map, &addr, size, prot, maxprot, - flags, handle, (vm_offset_t)uap->pos); + flags, handle, (vm_offset_t) uap->pos); if (error == 0) - *retval = (int)addr; + *retval = (int) addr; return (error); } #ifdef COMPAT_43 struct ommap_args { - caddr_t addr; - int len; - int prot; - int flags; - int fd; - long pos; + caddr_t addr; + int len; + int prot; + int flags; + int fd; + long pos; }; int ommap(p, uap, retval) @@ -261,12 +264,13 @@ ommap(p, uap, retval) 0, PROT_EXEC, PROT_WRITE, - PROT_EXEC|PROT_WRITE, + PROT_EXEC | PROT_WRITE, PROT_READ, - PROT_EXEC|PROT_READ, - PROT_WRITE|PROT_READ, - PROT_EXEC|PROT_WRITE|PROT_READ, + PROT_EXEC | PROT_READ, + PROT_WRITE | PROT_READ, + PROT_EXEC | PROT_WRITE | PROT_READ, }; + #define OMAP_ANON 0x0002 #define OMAP_COPY 0x0020 #define OMAP_SHARED 0x0010 @@ -275,7 +279,7 @@ ommap(p, uap, retval) nargs.addr = uap->addr; nargs.len = uap->len; - nargs.prot = cvtbsdprot[uap->prot&0x7]; + nargs.prot = cvtbsdprot[uap->prot & 0x7]; nargs.flags = 0; if (uap->flags & OMAP_ANON) nargs.flags |= MAP_ANON; @@ -293,12 +297,12 @@ ommap(p, uap, retval) nargs.pos = uap->pos; return (mmap(p, &nargs, retval)); } -#endif /* COMPAT_43 */ +#endif /* COMPAT_43 */ struct msync_args { - caddr_t addr; - int len; + caddr_t addr; + int len; }; int msync(p, uap, retval) @@ -313,22 +317,21 @@ msync(p, uap, retval) boolean_t syncio, invalidate; #ifdef DEBUG - if (mmapdebug & (MDB_FOLLOW|MDB_SYNC)) + if (mmapdebug & (MDB_FOLLOW | MDB_SYNC)) printf("msync(%d): addr %x len %x\n", - p->p_pid, uap->addr, uap->len); + p->p_pid, uap->addr, uap->len); #endif - if (((int)uap->addr & PAGE_MASK) || uap->addr + uap->len < uap->addr) + if (((int) uap->addr & PAGE_MASK) || uap->addr + uap->len < uap->addr) return (EINVAL); map = &p->p_vmspace->vm_map; - addr = (vm_offset_t)uap->addr; - size = (vm_size_t)uap->len; + addr = (vm_offset_t) uap->addr; + size = (vm_size_t) uap->len; /* * XXX Gak! If size is zero we are supposed to sync "all modified - * pages with the region containing addr". Unfortunately, we - * don't really keep track of individual mmaps so we approximate - * by flushing the range of the map entry containing addr. - * This can be incorrect if the region splits or is coalesced - * with a neighbor. + * pages with the region containing addr". Unfortunately, we don't + * really keep track of individual mmaps so we approximate by flushing + * the range of the map entry containing addr. This can be incorrect + * if the region splits or is coalesced with a neighbor. */ if (size == 0) { vm_map_entry_t entry; @@ -344,23 +347,23 @@ msync(p, uap, retval) #ifdef DEBUG if (mmapdebug & MDB_SYNC) printf("msync: cleaning/flushing address range [%x-%x)\n", - addr, addr+size); + addr, addr + size); #endif /* - * Could pass this in as a third flag argument to implement - * Sun's MS_ASYNC. + * Could pass this in as a third flag argument to implement Sun's + * MS_ASYNC. */ syncio = TRUE; /* - * XXX bummer, gotta flush all cached pages to ensure - * consistency with the file system cache. Otherwise, we could - * pass this in to implement Sun's MS_INVALIDATE. + * XXX bummer, gotta flush all cached pages to ensure consistency with + * the file system cache. Otherwise, we could pass this in to + * implement Sun's MS_INVALIDATE. */ invalidate = TRUE; /* * Clean the pages and interpret the return value. */ - rv = vm_map_clean(map, addr, addr+size, syncio, invalidate); + rv = vm_map_clean(map, addr, addr + size, syncio, invalidate); switch (rv) { case KERN_SUCCESS: break; @@ -375,8 +378,8 @@ msync(p, uap, retval) } struct munmap_args { - caddr_t addr; - int len; + caddr_t addr; + int len; }; int munmap(p, uap, retval) @@ -391,18 +394,18 @@ munmap(p, uap, retval) #ifdef DEBUG if (mmapdebug & MDB_FOLLOW) printf("munmap(%d): addr %x len %x\n", - p->p_pid, uap->addr, uap->len); + p->p_pid, uap->addr, uap->len); #endif addr = (vm_offset_t) uap->addr; if ((addr & PAGE_MASK) || uap->len < 0) - return(EINVAL); + return (EINVAL); size = (vm_size_t) round_page(uap->len); if (size == 0) - return(0); + return (0); /* - * Check for illegal addresses. Watch out for address wrap... - * Note that VM_*_ADDRESS are not constants due to casts (argh). + * Check for illegal addresses. Watch out for address wrap... Note + * that VM_*_ADDRESS are not constants due to casts (argh). */ if (VM_MAXUSER_ADDRESS > 0 && addr + size > VM_MAXUSER_ADDRESS) return (EINVAL); @@ -417,10 +420,10 @@ munmap(p, uap, retval) * Make sure entire range is allocated. */ if (!vm_map_check_protection(map, addr, addr + size, VM_PROT_NONE)) - return(EINVAL); + return (EINVAL); /* returns nothing but KERN_SUCCESS anyway */ - (void) vm_map_remove(map, addr, addr+size); - return(0); + (void) vm_map_remove(map, addr, addr + size); + return (0); } void @@ -440,9 +443,9 @@ munmapfd(p, fd) } struct mprotect_args { - caddr_t addr; - int len; - int prot; + caddr_t addr; + int len; + int prot; }; int mprotect(p, uap, retval) @@ -457,17 +460,17 @@ mprotect(p, uap, retval) #ifdef DEBUG if (mmapdebug & MDB_FOLLOW) printf("mprotect(%d): addr %x len %x prot %d\n", - p->p_pid, uap->addr, uap->len, uap->prot); + p->p_pid, uap->addr, uap->len, uap->prot); #endif - addr = (vm_offset_t)uap->addr; + addr = (vm_offset_t) uap->addr; if ((addr & PAGE_MASK) || uap->len < 0) - return(EINVAL); - size = (vm_size_t)uap->len; + return (EINVAL); + size = (vm_size_t) uap->len; prot = uap->prot & VM_PROT_ALL; - switch (vm_map_protect(&p->p_vmspace->vm_map, addr, addr+size, prot, - FALSE)) { + switch (vm_map_protect(&p->p_vmspace->vm_map, addr, addr + size, prot, + FALSE)) { case KERN_SUCCESS: return (0); case KERN_PROTECTION_FAILURE: @@ -477,10 +480,11 @@ mprotect(p, uap, retval) } struct madvise_args { - caddr_t addr; - int len; - int behav; + caddr_t addr; + int len; + int behav; }; + /* ARGSUSED */ int madvise(p, uap, retval) @@ -494,10 +498,11 @@ madvise(p, uap, retval) } struct mincore_args { - caddr_t addr; - int len; - char *vec; + caddr_t addr; + int len; + char *vec; }; + /* ARGSUSED */ int mincore(p, uap, retval) @@ -511,8 +516,8 @@ mincore(p, uap, retval) } struct mlock_args { - caddr_t addr; - size_t len; + caddr_t addr; + size_t len; }; int mlock(p, uap, retval) @@ -528,12 +533,12 @@ mlock(p, uap, retval) #ifdef DEBUG if (mmapdebug & MDB_FOLLOW) printf("mlock(%d): addr %x len %x\n", - p->p_pid, uap->addr, uap->len); + p->p_pid, uap->addr, uap->len); #endif - addr = (vm_offset_t)uap->addr; + addr = (vm_offset_t) uap->addr; if ((addr & PAGE_MASK) || uap->addr + uap->len < uap->addr) return (EINVAL); - size = round_page((vm_size_t)uap->len); + size = round_page((vm_size_t) uap->len); if (atop(size) + cnt.v_wire_count > vm_page_max_wired) return (EAGAIN); #ifdef pmap_wired_count @@ -546,13 +551,13 @@ mlock(p, uap, retval) return (error); #endif - error = vm_map_pageable(&p->p_vmspace->vm_map, addr, addr+size, FALSE); + error = vm_map_pageable(&p->p_vmspace->vm_map, addr, addr + size, FALSE); return (error == KERN_SUCCESS ? 0 : ENOMEM); } struct munlock_args { - caddr_t addr; - size_t len; + caddr_t addr; + size_t len; }; int munlock(p, uap, retval) @@ -567,9 +572,9 @@ munlock(p, uap, retval) #ifdef DEBUG if (mmapdebug & MDB_FOLLOW) printf("munlock(%d): addr %x len %x\n", - p->p_pid, uap->addr, uap->len); + p->p_pid, uap->addr, uap->len); #endif - addr = (vm_offset_t)uap->addr; + addr = (vm_offset_t) uap->addr; if ((addr & PAGE_MASK) || uap->addr + uap->len < uap->addr) return (EINVAL); #ifndef pmap_wired_count @@ -577,9 +582,9 @@ munlock(p, uap, retval) if (error) return (error); #endif - size = round_page((vm_size_t)uap->len); + size = round_page((vm_size_t) uap->len); - error = vm_map_pageable(&p->p_vmspace->vm_map, addr, addr+size, TRUE); + error = vm_map_pageable(&p->p_vmspace->vm_map, addr, addr + size, TRUE); return (error == KERN_SUCCESS ? 0 : ENOMEM); } @@ -613,21 +618,21 @@ vm_mmap(map, addr, size, prot, maxprot, flags, handle, foff) *addr = round_page(*addr); } else { fitit = FALSE; - (void)vm_deallocate(map, *addr, size); + (void) vm_deallocate(map, *addr, size); } /* - * Lookup/allocate pager. All except an unnamed anonymous lookup - * gain a reference to ensure continued existance of the object. - * (XXX the exception is to appease the pageout daemon) + * Lookup/allocate pager. All except an unnamed anonymous lookup gain + * a reference to ensure continued existance of the object. (XXX the + * exception is to appease the pageout daemon) */ if (flags & MAP_ANON) type = PG_DFLT; else { - vp = (struct vnode *)handle; + vp = (struct vnode *) handle; if (vp->v_type == VCHR) { type = PG_DEVICE; - handle = (caddr_t)vp->v_rdev; + handle = (caddr_t) vp->v_rdev; } else type = PG_VNODE; } @@ -638,6 +643,9 @@ vm_mmap(map, addr, size, prot, maxprot, flags, handle, foff) * Find object and release extra reference gained by lookup */ object = vm_object_lookup(pager); + if (handle && object == NULL) { + panic("vm_mmap: vm_object_lookup failed"); + } vm_object_deallocate(object); /* @@ -645,7 +653,7 @@ vm_mmap(map, addr, size, prot, maxprot, flags, handle, foff) */ if (flags & MAP_ANON) { rv = vm_allocate_with_pager(map, addr, size, fitit, - pager, foff, TRUE); + pager, foff, TRUE); if (rv != KERN_SUCCESS) { if (handle == NULL) vm_pager_deallocate(pager); @@ -654,34 +662,32 @@ vm_mmap(map, addr, size, prot, maxprot, flags, handle, foff) goto out; } /* - * Don't cache anonymous objects. - * Loses the reference gained by vm_pager_allocate. - * Note that object will be NULL when handle == NULL, - * this is ok since vm_allocate_with_pager has made - * sure that these objects are uncached. + * Don't cache anonymous objects. Loses the reference gained + * by vm_pager_allocate. Note that object will be NULL when + * handle == NULL, this is ok since vm_allocate_with_pager has + * made sure that these objects are uncached. */ (void) pager_cache(object, FALSE); #ifdef DEBUG if (mmapdebug & MDB_MAPIT) printf("vm_mmap(%d): ANON *addr %x size %x pager %x\n", - curproc->p_pid, *addr, size, pager); + curproc->p_pid, *addr, size, pager); #endif } /* - * Must be a mapped file. - * Distinguish between character special and regular files. + * Must be a mapped file. Distinguish between character special and + * regular files. */ else if (vp->v_type == VCHR) { rv = vm_allocate_with_pager(map, addr, size, fitit, - pager, foff, FALSE); + pager, foff, FALSE); /* - * Uncache the object and lose the reference gained - * by vm_pager_allocate(). If the call to - * vm_allocate_with_pager() was sucessful, then we - * gained an additional reference ensuring the object - * will continue to exist. If the call failed then - * the deallocate call below will terminate the - * object which is fine. + * Uncache the object and lose the reference gained by + * vm_pager_allocate(). If the call to + * vm_allocate_with_pager() was sucessful, then we gained an + * additional reference ensuring the object will continue to + * exist. If the call failed then the deallocate call below + * will terminate the object which is fine. */ (void) pager_cache(object, FALSE); if (rv != KERN_SUCCESS) @@ -694,23 +700,23 @@ vm_mmap(map, addr, size, prot, maxprot, flags, handle, foff) #ifdef DEBUG if (object == NULL) printf("vm_mmap: no object: vp %x, pager %x\n", - vp, pager); + vp, pager); #endif /* - * Map it directly. - * Allows modifications to go out to the vnode. + * Map it directly. Allows modifications to go out to the + * vnode. */ if (flags & MAP_SHARED) { rv = vm_allocate_with_pager(map, addr, size, - fitit, pager, - foff, FALSE); + fitit, pager, + foff, FALSE); if (rv != KERN_SUCCESS) { vm_object_deallocate(object); goto out; } /* - * Don't cache the object. This is the easiest way - * of ensuring that data gets back to the filesystem + * Don't cache the object. This is the easiest way of + * ensuring that data gets back to the filesystem * because vnode_pager_deallocate() will fsync the * vnode. pager_cache() will lose the extra ref. */ @@ -719,43 +725,42 @@ vm_mmap(map, addr, size, prot, maxprot, flags, handle, foff) else vm_object_deallocate(object); - if( map->pmap) - pmap_object_init_pt(map->pmap, *addr, object, foff, size); + if (map->pmap) + pmap_object_init_pt(map->pmap, *addr, object, foff, size); } /* - * Copy-on-write of file. Two flavors. - * MAP_COPY is true COW, you essentially get a snapshot of - * the region at the time of mapping. MAP_PRIVATE means only - * that your changes are not reflected back to the object. - * Changes made by others will be seen. + * Copy-on-write of file. Two flavors. MAP_COPY is true COW, + * you essentially get a snapshot of the region at the time of + * mapping. MAP_PRIVATE means only that your changes are not + * reflected back to the object. Changes made by others will + * be seen. */ else { vm_map_t tmap; vm_offset_t off; /* locate and allocate the target address space */ - rv = vm_map_find(map, NULL, (vm_offset_t)0, - addr, size, fitit); + rv = vm_map_find(map, NULL, (vm_offset_t) 0, + addr, size, fitit); if (rv != KERN_SUCCESS) { vm_object_deallocate(object); goto out; } tmap = vm_map_create(pmap_create(size), VM_MIN_ADDRESS, - VM_MIN_ADDRESS+size, TRUE); + VM_MIN_ADDRESS + size, TRUE); off = VM_MIN_ADDRESS; rv = vm_allocate_with_pager(tmap, &off, size, - TRUE, pager, - foff, FALSE); + TRUE, pager, + foff, FALSE); if (rv != KERN_SUCCESS) { vm_object_deallocate(object); vm_map_deallocate(tmap); goto out; } /* - * (XXX) - * MAP_PRIVATE implies that we see changes made by - * others. To ensure that we need to guarentee that - * no copy object is created (otherwise original + * (XXX) MAP_PRIVATE implies that we see changes made + * by others. To ensure that we need to guarentee + * that no copy object is created (otherwise original * pages would be pushed to the copy object and we * would never see changes made by others). We * totally sleeze it right now by marking the object @@ -764,13 +769,12 @@ vm_mmap(map, addr, size, prot, maxprot, flags, handle, foff) if ((flags & MAP_COPY) == 0) object->flags |= OBJ_INTERNAL; rv = vm_map_copy(map, tmap, *addr, size, off, - FALSE, FALSE); + FALSE, FALSE); object->flags &= ~OBJ_INTERNAL; /* - * (XXX) - * My oh my, this only gets worse... - * Force creation of a shadow object so that - * vm_map_fork will do the right thing. + * (XXX) My oh my, this only gets worse... Force + * creation of a shadow object so that vm_map_fork + * will do the right thing. */ if ((flags & MAP_COPY) == 0) { vm_map_t tmap; @@ -782,19 +786,18 @@ vm_mmap(map, addr, size, prot, maxprot, flags, handle, foff) tmap = map; vm_map_lookup(&tmap, *addr, VM_PROT_WRITE, - &tentry, &tobject, &toffset, - &tprot, &twired, &tsu); + &tentry, &tobject, &toffset, + &tprot, &twired, &tsu); vm_map_lookup_done(tmap, tentry); } /* - * (XXX) - * Map copy code cannot detect sharing unless a + * (XXX) Map copy code cannot detect sharing unless a * sharing map is involved. So we cheat and write * protect everything ourselves. */ vm_object_pmap_copy(object, foff, foff + size); - if( map->pmap) - pmap_object_init_pt(map->pmap, *addr, object, foff, size); + if (map->pmap) + pmap_object_init_pt(map->pmap, *addr, object, foff, size); vm_object_deallocate(object); vm_map_deallocate(tmap); if (rv != KERN_SUCCESS) @@ -803,18 +806,18 @@ vm_mmap(map, addr, size, prot, maxprot, flags, handle, foff) #ifdef DEBUG if (mmapdebug & MDB_MAPIT) printf("vm_mmap(%d): FILE *addr %x size %x pager %x\n", - curproc->p_pid, *addr, size, pager); + curproc->p_pid, *addr, size, pager); #endif } /* - * Correct protection (default is VM_PROT_ALL). - * If maxprot is different than prot, we must set both explicitly. + * Correct protection (default is VM_PROT_ALL). If maxprot is + * different than prot, we must set both explicitly. */ rv = KERN_SUCCESS; if (maxprot != VM_PROT_ALL) - rv = vm_map_protect(map, *addr, *addr+size, maxprot, TRUE); + rv = vm_map_protect(map, *addr, *addr + size, maxprot, TRUE); if (rv == KERN_SUCCESS && prot != maxprot) - rv = vm_map_protect(map, *addr, *addr+size, prot, FALSE); + rv = vm_map_protect(map, *addr, *addr + size, prot, FALSE); if (rv != KERN_SUCCESS) { (void) vm_deallocate(map, *addr, size); goto out; @@ -823,7 +826,7 @@ vm_mmap(map, addr, size, prot, maxprot, flags, handle, foff) * Shared memory is also shared with children. */ if (flags & MAP_SHARED) { - rv = vm_map_inherit(map, *addr, *addr+size, VM_INHERIT_SHARE); + rv = vm_map_inherit(map, *addr, *addr + size, VM_INHERIT_SHARE); if (rv != KERN_SUCCESS) { (void) vm_deallocate(map, *addr, size); goto out; |