[BACK]Return to uvm_mmap.c CVS log [TXT][DIR] Up to [cvs.NetBSD.org] / src / sys / uvm

Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files.

Diff for /src/sys/uvm/uvm_mmap.c between version 1.86 and 1.86.2.1

version 1.86, 2005/01/01 21:00:06 version 1.86.2.1, 2005/04/29 11:29:45
Line 297  sys_mmap(l, v, retval)
Line 297  sys_mmap(l, v, retval)
         vsize_t size, pageoff;          vsize_t size, pageoff;
         vm_prot_t prot, maxprot;          vm_prot_t prot, maxprot;
         int flags, fd;          int flags, fd;
         vaddr_t vm_min_address = VM_MIN_ADDRESS;          vaddr_t vm_min_address = VM_MIN_ADDRESS, defaddr;
         struct filedesc *fdp = p->p_fd;          struct filedesc *fdp = p->p_fd;
         struct file *fp;          struct file *fp;
         struct vnode *vp;          struct vnode *vp;
Line 335  sys_mmap(l, v, retval)
Line 335  sys_mmap(l, v, retval)
         if ((ssize_t) size < 0)          if ((ssize_t) size < 0)
                 return (EINVAL);                        /* don't allow wrap */                  return (EINVAL);                        /* don't allow wrap */
   
 #ifndef pmap_wired_count  
         /*  
          * if we're going to wire the mapping, restrict it to superuser.  
          */  
   
         if ((flags & MAP_WIRED) != 0 &&  
             (error = suser(p->p_ucred, &p->p_acflag)) != 0)  
                 return (error);  
 #endif  
   
         /*          /*
          * now check (MAP_FIXED) or get (!MAP_FIXED) the "addr"           * now check (MAP_FIXED) or get (!MAP_FIXED) the "addr"
          */           */
Line 373  sys_mmap(l, v, retval)
Line 363  sys_mmap(l, v, retval)
                  * VAC, etc)                   * VAC, etc)
                  */                   */
   
                   defaddr = p->p_emul->e_vm_default_addr(p,
                       (vaddr_t)p->p_vmspace->vm_daddr, size);
   
                 if (addr == 0 ||                  if (addr == 0 ||
                     !(p->p_vmspace->vm_map.flags & VM_MAP_TOPDOWN))                      !(p->p_vmspace->vm_map.flags & VM_MAP_TOPDOWN))
                         addr = MAX(addr,                          addr = MAX(addr, defaddr);
                             VM_DEFAULT_ADDRESS(p->p_vmspace->vm_daddr, size));  
                 else                  else
                         addr = MIN(addr,                          addr = MIN(addr, defaddr);
                             VM_DEFAULT_ADDRESS(p->p_vmspace->vm_daddr, size));  
         }          }
   
         /*          /*
Line 686  sys_munmap(l, v, retval)
Line 677  sys_munmap(l, v, retval)
                 return (EINVAL);                  return (EINVAL);
         }          }
 #endif  #endif
         uvm_unmap_remove(map, addr, addr + size, &dead_entries, NULL);          uvm_unmap_remove(map, addr, addr + size, &dead_entries, NULL, 0);
         vm_map_unlock(map);          vm_map_unlock(map);
         if (dead_entries != NULL)          if (dead_entries != NULL)
                 uvm_unmap_detach(dead_entries, 0);                  uvm_unmap_detach(dead_entries, 0);
Line 924  sys_mlock(l, v, retval)
Line 915  sys_mlock(l, v, retval)
         if (atop(size) + uvmexp.wired > uvmexp.wiredmax)          if (atop(size) + uvmexp.wired > uvmexp.wiredmax)
                 return (EAGAIN);                  return (EAGAIN);
   
 #ifdef pmap_wired_count  
         if (size + ptoa(pmap_wired_count(vm_map_pmap(&p->p_vmspace->vm_map))) >          if (size + ptoa(pmap_wired_count(vm_map_pmap(&p->p_vmspace->vm_map))) >
                         p->p_rlimit[RLIMIT_MEMLOCK].rlim_cur)                          p->p_rlimit[RLIMIT_MEMLOCK].rlim_cur)
                 return (EAGAIN);                  return (EAGAIN);
 #else  
         if ((error = suser(p->p_ucred, &p->p_acflag)) != 0)  
                 return (error);  
 #endif  
   
         error = uvm_map_pageable(&p->p_vmspace->vm_map, addr, addr+size, FALSE,          error = uvm_map_pageable(&p->p_vmspace->vm_map, addr, addr+size, FALSE,
             0);              0);
Line 979  sys_munlock(l, v, retval)
Line 965  sys_munlock(l, v, retval)
         if (addr + size < addr)          if (addr + size < addr)
                 return (EINVAL);                  return (EINVAL);
   
 #ifndef pmap_wired_count  
         if ((error = suser(p->p_ucred, &p->p_acflag)) != 0)  
                 return (error);  
 #endif  
   
         error = uvm_map_pageable(&p->p_vmspace->vm_map, addr, addr+size, TRUE,          error = uvm_map_pageable(&p->p_vmspace->vm_map, addr, addr+size, TRUE,
             0);              0);
         if (error == EFAULT)          if (error == EFAULT)
Line 1013  sys_mlockall(l, v, retval)
Line 994  sys_mlockall(l, v, retval)
             (flags & ~(MCL_CURRENT|MCL_FUTURE)) != 0)              (flags & ~(MCL_CURRENT|MCL_FUTURE)) != 0)
                 return (EINVAL);                  return (EINVAL);
   
 #ifndef pmap_wired_count  
         if ((error = suser(p->p_ucred, &p->p_acflag)) != 0)  
                 return (error);  
 #endif  
   
         error = uvm_map_pageable_all(&p->p_vmspace->vm_map, flags,          error = uvm_map_pageable_all(&p->p_vmspace->vm_map, flags,
             p->p_rlimit[RLIMIT_MEMLOCK].rlim_cur);              p->p_rlimit[RLIMIT_MEMLOCK].rlim_cur);
         return (error);          return (error);
Line 1105  uvm_mmap(map, addr, size, prot, maxprot,
Line 1081  uvm_mmap(map, addr, size, prot, maxprot,
                 align = 1L << align;                  align = 1L << align;
                 if (align < PAGE_SIZE)                  if (align < PAGE_SIZE)
                         return(EINVAL);                          return(EINVAL);
                 if (align >= map->max_offset)                  if (align >= vm_map_max(map))
                         return(ENOMEM);                          return(ENOMEM);
                 if (flags & MAP_FIXED) {                  if (flags & MAP_FIXED) {
                         if ((*addr & (align-1)) != 0)                          if ((*addr & (align-1)) != 0)
Line 1207  uvm_mmap(map, addr, size, prot, maxprot,
Line 1183  uvm_mmap(map, addr, size, prot, maxprot,
         }          }
         vm_map_lock(map);          vm_map_lock(map);
         if ((flags & MAP_WIRED) != 0 || (map->flags & VM_MAP_WIREFUTURE) != 0) {          if ((flags & MAP_WIRED) != 0 || (map->flags & VM_MAP_WIREFUTURE) != 0) {
                 if ((atop(size) + uvmexp.wired) > uvmexp.wiredmax                  if (atop(size) + uvmexp.wired > uvmexp.wiredmax ||
 #ifdef pmap_wired_count                      (locklimit != 0 &&
                     || (locklimit != 0 && (size +                       size + ptoa(pmap_wired_count(vm_map_pmap(map))) >
                     ptoa(pmap_wired_count(vm_map_pmap(map)))) >                       locklimit)) {
                         locklimit)  
 #endif  
                 ) {  
                         vm_map_unlock(map);                          vm_map_unlock(map);
                         uvm_unmap(map, *addr, *addr + size);                          uvm_unmap(map, *addr, *addr + size);
                         return ENOMEM;                          return ENOMEM;
Line 1234  uvm_mmap(map, addr, size, prot, maxprot,
Line 1207  uvm_mmap(map, addr, size, prot, maxprot,
         vm_map_unlock(map);          vm_map_unlock(map);
         return 0;          return 0;
 }  }
   
   vaddr_t
   uvm_default_mapaddr(struct proc *p, vaddr_t base, vsize_t sz)
   {
           return VM_DEFAULT_ADDRESS(base, sz);
   }

Legend:
Removed from v.1.86  
changed lines
  Added in v.1.86.2.1

CVSweb <webmaster@jp.NetBSD.org>