valid VMA ranges and mincore()
Konstantin Belousov
kostikbel at gmail.com
Wed Jun 14 10:34:51 UTC 2006
On Sat, Jun 10, 2006 at 06:22:46PM +0200, Bruno Haible wrote:
> Proposal 1: Change mincore() to behave like the one on NetBSD, Linux,
> Solaris.
Please, evaluate the patch. If it does what you need, I will
push it for review.
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 10:32:11 -0000
@@ -907,6 +907,40 @@
++lastvecindex;
}
+ /* Mark unmapped areas of the queried address
+ * space with -1.
+ */
+ for (addr = first_addr; addr < end; ) {
+ vm_offset_t saddr, eaddr;
+
+ vm_map_lock_read(map);
+ if (vm_map_lookup_entry(map, addr, &entry)) {
+ addr = entry->end;
+ vm_map_unlock_read(map);
+ continue;
+ }
+ entry = entry->next;
+ if (entry->start < addr) {
+ /* past the last entry in the map */
+ saddr = eaddr = end;
+ } else {
+ saddr = entry->start;
+ eaddr = entry->end;
+ }
+ vm_map_unlock_read(map);
+
+ while (addr < saddr) {
+ vecindex = OFF_TO_IDX(addr - first_addr);
+ error = subyte(vec + vecindex, -1);
+ if (error) {
+ error = EFAULT;
+ goto done2;
+ }
+ addr += PAGE_SIZE;
+ }
+ addr = eaddr;
+ }
+
/*
* If the map has changed, due to the subyte, the previous
* output may be invalid.
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 187 bytes
Desc: not available
Url : http://lists.freebsd.org/pipermail/freebsd-hackers/attachments/20060614/331087e9/attachment.pgp
More information about the freebsd-hackers
mailing list