svn commit: r211937 - in head: lib/libc/sys sys/sys sys/vm

Alan Cox alc at FreeBSD.org
Sat Aug 28 16:57:07 UTC 2010


Author: alc
Date: Sat Aug 28 16:57:07 2010
New Revision: 211937
URL: http://svn.freebsd.org/changeset/base/211937

Log:
  Add the MAP_PREFAULT_READ option to mmap(2).
  
  Reviewed by:	jhb, kib

Modified:
  head/lib/libc/sys/mmap.2
  head/sys/sys/mman.h
  head/sys/sys/param.h
  head/sys/vm/vm_mmap.c

Modified: head/lib/libc/sys/mmap.2
==============================================================================
--- head/lib/libc/sys/mmap.2	Sat Aug 28 16:32:01 2010	(r211936)
+++ head/lib/libc/sys/mmap.2	Sat Aug 28 16:57:07 2010	(r211937)
@@ -28,7 +28,7 @@
 .\"	@(#)mmap.2	8.4 (Berkeley) 5/11/95
 .\" $FreeBSD$
 .\"
-.Dd November 6, 2009
+.Dd August 28, 2010
 .Dt MMAP 2
 .Os
 .Sh NAME
@@ -211,6 +211,19 @@ implements a coherent file system buffer
 However, it may be
 used to associate dirty VM pages with file system buffers and thus cause
 them to be flushed to physical media sooner rather than later.
+.It Dv MAP_PREFAULT_READ
+Immediately update the calling process's lowest-level virtual address
+translation structures, such as its page table, so that every memory
+resident page within the region is mapped for read access.
+Ordinarily these structures are updated lazily.
+The effect of this option is to eliminate any soft faults that would
+otherwise occur on the initial read accesses to the region.
+Although this option does not preclude
+.Fa prot
+from including
+.Dv PROT_WRITE ,
+it does not eliminate soft faults on the initial write accesses to the
+region.
 .It Dv MAP_PRIVATE
 Modifications are private.
 .It Dv MAP_SHARED

Modified: head/sys/sys/mman.h
==============================================================================
--- head/sys/sys/mman.h	Sat Aug 28 16:32:01 2010	(r211936)
+++ head/sys/sys/mman.h	Sat Aug 28 16:57:07 2010	(r211937)
@@ -90,6 +90,7 @@
  * Extended flags
  */
 #define	MAP_NOCORE	 0x00020000 /* dont include these pages in a coredump */
+#define	MAP_PREFAULT_READ 0x00040000 /* prefault mapping for reading */
 #endif /* __BSD_VISIBLE */
 
 #if __POSIX_VISIBLE >= 199309

Modified: head/sys/sys/param.h
==============================================================================
--- head/sys/sys/param.h	Sat Aug 28 16:32:01 2010	(r211936)
+++ head/sys/sys/param.h	Sat Aug 28 16:57:07 2010	(r211937)
@@ -58,7 +58,7 @@
  *		in the range 5 to 9.
  */
 #undef __FreeBSD_version
-#define __FreeBSD_version 900018	/* Master, propagated to newvers */
+#define __FreeBSD_version 900019	/* Master, propagated to newvers */
 
 #ifndef LOCORE
 #include <sys/types.h>

Modified: head/sys/vm/vm_mmap.c
==============================================================================
--- head/sys/vm/vm_mmap.c	Sat Aug 28 16:32:01 2010	(r211936)
+++ head/sys/vm/vm_mmap.c	Sat Aug 28 16:57:07 2010	(r211937)
@@ -1467,9 +1467,10 @@ vm_mmap(vm_map_t map, vm_offset_t *addr,
 		 */
 		if (handle == 0)
 			foff = 0;
-	} else {
+	} else if (flags & MAP_PREFAULT_READ)
+		docow = MAP_PREFAULT;
+	else
 		docow = MAP_PREFAULT_PARTIAL;
-	}
 
 	if ((flags & (MAP_ANON|MAP_SHARED)) == 0)
 		docow |= MAP_COPY_ON_WRITE;


More information about the svn-src-head mailing list