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