Hello Konstantin, > > - Filling in values of -1 into the array could be done more easily by > > changing the statements in sys/vm/vm_mmap.c lines 861 and 902. > I do not agree. It zeroes array not only for holes, but also for (some) > skipped vm areas.
ok, you understand the code better than I do :-) > Index: vm_mmap.c > =================================================================== > RCS file: /usr/local/arch/ncvs/src/sys/vm/vm_mmap.c,v > retrieving revision 1.205 > diff -u -r1.205 vm_mmap.c > --- vm_mmap.c 21 Apr 2006 07:17:25 -0000 1.205 > +++ vm_mmap.c 14 Jun 2006 13:51:20 -0000 > @@ -756,8 +756,10 @@ > first_addr = addr = trunc_page((vm_offset_t) uap->addr); > end = addr + (vm_size_t)round_page(uap->len); > map = &td->td_proc->p_vmspace->vm_map; > - if (end > vm_map_max(map) || end < addr) > + if (end < addr) > return (EINVAL); > + if (end > vm_map_max(map)) > + return (ENOMEM); > > /* > * Address of byte vector > @@ -770,8 +772,18 @@ > RestartScan: > timestamp = map->timestamp; > > - if (!vm_map_lookup_entry(map, addr, &entry)) > - entry = entry->next; > + if (!vm_map_lookup_entry(map, first_addr, &entry)) { > + vm_map_unlock_read(map); > + return (ENOMEM); > + } > + for (current = entry; > + (current != &map->header) && (current->end < end); > + current = current->next) { > + if (current->end != current->next->start) { > + vm_map_unlock_read(map); > + return (ENOMEM); > + } > + } > > /* > * Do this on a map entry basis so that if the pages are not > Looks good to me: This does what Linux, NetBSD, Solaris do. Thanks! Bruno _______________________________________________ freebsd-hackers@freebsd.org mailing list http://lists.freebsd.org/mailman/listinfo/freebsd-hackers To unsubscribe, send any mail to "[EMAIL PROTECTED]"