back out change requiring alignment of "pos"
authorMike Hibler <hibler@ucbvax.Berkeley.EDU>
Sat, 28 May 1994 06:28:11 +0000 (22:28 -0800)
committerMike Hibler <hibler@ucbvax.Berkeley.EDU>
Sat, 28 May 1994 06:28:11 +0000 (22:28 -0800)
also don't require that munmap range be completely allocated

SCCS-vsn: sys/vm/vm_mmap.c 8.7

usr/src/sys/vm/vm_mmap.c

index 73de83c..9c8f3ff 100644 (file)
@@ -11,7 +11,7 @@
  *
  * from: Utah $Hdr: vm_mmap.c 1.6 91/10/21$
  *
  *
  * from: Utah $Hdr: vm_mmap.c 1.6 91/10/21$
  *
- *     @(#)vm_mmap.c   8.6 (Berkeley) %G%
+ *     @(#)vm_mmap.c   8.7 (Berkeley) %G%
  */
 
 /*
  */
 
 /*
@@ -179,10 +179,17 @@ mmap(p, uap, retval)
        /*
         * 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.
+        *
+        * XXX most (all?) vendors require that the file offset be
+        * page aligned as well.  However, we already have applications
+        * (e.g. nlist) that rely on unrestricted alignment.  Since we
+        * support it, let it happen.
         */
        addr = (vm_offset_t) uap->addr;
        if (((flags & MAP_FIXED) && (addr & PAGE_MASK)) ||
         */
        addr = (vm_offset_t) uap->addr;
        if (((flags & MAP_FIXED) && (addr & PAGE_MASK)) ||
+#if 0
            ((flags & MAP_ANON) == 0 && (pos & PAGE_MASK)) ||
            ((flags & MAP_ANON) == 0 && (pos & PAGE_MASK)) ||
+#endif
            (ssize_t)uap->len < 0 || ((flags & MAP_ANON) && uap->fd != -1))
                return (EINVAL);
        size = (vm_size_t) round_page(uap->len);
            (ssize_t)uap->len < 0 || ((flags & MAP_ANON) && uap->fd != -1))
                return (EINVAL);
        size = (vm_size_t) round_page(uap->len);
@@ -385,9 +392,12 @@ munmap(p, uap, retval)
        map = &p->p_vmspace->vm_map;
        /*
         * Make sure entire range is allocated.
        map = &p->p_vmspace->vm_map;
        /*
         * Make sure entire range is allocated.
+        * XXX this seemed overly restrictive, so we relaxed it.
         */
         */
+#if 0
        if (!vm_map_check_protection(map, addr, addr + size, VM_PROT_NONE))
                return(EINVAL);
        if (!vm_map_check_protection(map, addr, addr + size, VM_PROT_NONE))
                return(EINVAL);
+#endif
        /* returns nothing but KERN_SUCCESS anyway */
        (void) vm_map_remove(map, addr, addr+size);
        return(0);
        /* returns nothing but KERN_SUCCESS anyway */
        (void) vm_map_remove(map, addr, addr+size);
        return(0);