+.\"
+.\" Copyright (c) 2008 Apple Inc. All rights reserved.
+.\"
+.\" @APPLE_LICENSE_HEADER_START@
+.\"
+.\" This file contains Original Code and/or Modifications of Original Code
+.\" as defined in and that are subject to the Apple Public Source License
+.\" Version 2.0 (the 'License'). You may not use this file except in
+.\" compliance with the License. Please obtain a copy of the License at
+.\" http://www.opensource.apple.com/apsl/ and read it before using this
+.\" file.
+.\"
+.\" The Original Code and all software distributed under the License are
+.\" distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER
+.\" EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES,
+.\" INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY,
+.\" FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT.
+.\" Please see the License for the specific language governing rights and
+.\" limitations under the License.
+.\"
+.\" @APPLE_LICENSE_HEADER_END@
+.\"
+.\"
.\" $NetBSD: munmap.2,v 1.5 1995/02/27 12:35:03 cgd Exp $
.\"
.\" Copyright (c) 1991, 1993
.\"
.\" @(#)munmap.2 8.2 (Berkeley) 4/15/94
.\"
-.Dd April 15, 1994
+.Dd October 16, 2008
.Dt MUNMAP 2
.Os
.Sh NAME
.Nm munmap
.Nd remove a mapping
.Sh SYNOPSIS
-.Fd #include <sys/types.h>
.Fd #include <sys/mman.h>
.Ft int
-.Fn munmap "caddr_t addr" "size_t len"
+.Fo munmap
+.Fa "void *addr"
+.Fa "size_t len"
+.Fc
.Sh DESCRIPTION
The
.Fn munmap
system call
deletes the mappings for the specified address range,
-and causes further references to addresses within the range
+causing further references to addresses within the range
to generate invalid memory references.
+.Sh DIRTY PAGE HANDLING
+How
+.Fn munmap
+handles a dirty page, depends on what type of memory is being unmapped:
+.Pp
+.Bl -tag -width "[System V Shared]"
+.It Bq Anonymous
+If the memory is anonymous memory and if the last reference is going
+away, then the contents are discarded by definition of anonymous memory.
+.It Bq System V Shared
+If the memory mapping was created using System V shared memory, then
+the contents persist until the System V memory region is destroyed or
+the system is rebooted.
+.It Bq File mapping
+If the mapping maps data from a file (MAP_SHARED), then the memory will
+eventually be written back to disk if it's dirty. This will happen
+automatically at some point in the future (implementation dependent).
+Note: to force the memory to be written back to the disk, use
+.Xr msync 2 .
+.El
+.Pp
+If there are still other references to the memory when the munmap is
+done, then nothing is done to the memory itself and it may be swapped
+out if need be. The memory will continue to persist until the last
+reference goes away (except for System V shared memory in which case,
+see above).
.Sh RETURN VALUES
Upon successful completion,
.Nm munmap
.Fn Munmap
will fail if:
.Bl -tag -width Er
+.\" ===========
.It Bq Er EINVAL
The
.Fa addr
-parameter was not page aligned, the
+parameter was not page aligned (i.e., a multiple of the page size).
+.\" ===========
+.It Bq Er EINVAL
+The
.Fa len
-parameter was negative, or
-some part of the region being unmapped is not part of the currently
+parameter was negative or zero.
+.\" ===========
+.It Bq Er EINVAL
+Some part of the region being unmapped is not part of the currently
valid address space.
.El
+.Sh LEGACY SYNOPSIS
+.Fd #include <sys/types.h>
+.Fd #include <sys/mman.h>
+.Pp
+The include file
+.In sys/types.h
+is necessary.
+.Pp
+.Ft int
+.br
+.Fo munmap
+.Fa "caddr_t addr"
+.Fa "size_t len"
+.Fc ;
+.Pp
+The type of
+.Fa addr
+has changed.
.Sh "SEE ALSO"
.Xr getpagesize 3 ,
.Xr msync 2 ,
.Xr munmap 2 ,
.Xr mprotect 2 ,
.Xr madvise 2 ,
-.Xr mincore 2
+.Xr mincore 2 ,
+.Xr compat 5
.Sh HISTORY
The
.Fn munmap