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