xref: /openbsd-src/share/man/man9/pmap.9 (revision 2a69d36358b3b4daf682812dd6975c58a81dfaf8)
1*2a69d363Skettenis.\"	$OpenBSD: pmap.9,v 1.21 2025/01/19 22:14:45 kettenis Exp $
21c60f1d7Swcobb.\"
30e322234Swcobb.\" Copyright (c) 2001, 2002, 2003 CubeSoft Communications, Inc.
41c60f1d7Swcobb.\" <http://www.csoft.org>
51c60f1d7Swcobb.\"
61c60f1d7Swcobb.\" Redistribution and use in source and binary forms, with or without
71c60f1d7Swcobb.\" modification, are permitted provided that the following conditions
81c60f1d7Swcobb.\" are met:
90e322234Swcobb.\" 1. Redistributions of source code must retain the above copyright
101c60f1d7Swcobb.\"    notice, this list of conditions and the following disclaimer.
110e322234Swcobb.\" 2. Redistributions in binary form must reproduce the above copyright
120e322234Swcobb.\"    notice, this list of conditions and the following disclaimer in the
130e322234Swcobb.\"    documentation and/or other materials provided with the distribution.
141c60f1d7Swcobb.\"
151c60f1d7Swcobb.\" THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
161c60f1d7Swcobb.\" IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
171c60f1d7Swcobb.\" WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
181c60f1d7Swcobb.\" ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT,
191c60f1d7Swcobb.\" INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
201c60f1d7Swcobb.\" (INCLUDING BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
211c60f1d7Swcobb.\" SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
221c60f1d7Swcobb.\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
231c60f1d7Swcobb.\" STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
241c60f1d7Swcobb.\" IN ANY WAY OUT OF THE USE OF THIS SOFTWARE EVEN IF ADVISED OF THE
251c60f1d7Swcobb.\" POSSIBILITY OF SUCH DAMAGE.
261c60f1d7Swcobb.\"
27*2a69d363Skettenis.Dd $Mdocdate: January 19 2025 $
2833378d91Sjmc.Dt PMAP_INIT 9
291c60f1d7Swcobb.Os
301c60f1d7Swcobb.Sh NAME
3133378d91Sjmc.Nm pmap_init ,
3233378d91Sjmc.Nm pmap_enter ,
3333378d91Sjmc.Nm pmap_kenter_pa ,
3433378d91Sjmc.Nm pmap_remove ,
35b36d8e00Sschwarze.Nm pmap_kremove ,
3633378d91Sjmc.Nm pmap_unwire ,
3733378d91Sjmc.Nm pmap_protect ,
3833378d91Sjmc.Nm pmap_page_protect ,
3933378d91Sjmc.Nm pmap_is_modified ,
4033378d91Sjmc.Nm pmap_clear_modify ,
4133378d91Sjmc.Nm pmap_is_referenced ,
4233378d91Sjmc.Nm pmap_clear_reference ,
4333378d91Sjmc.Nm pmap_copy_page ,
4433378d91Sjmc.Nm pmap_zero_page ,
4533378d91Sjmc.Nm pmap_create ,
4633378d91Sjmc.Nm pmap_reference ,
4733378d91Sjmc.Nm pmap_destroy ,
4833378d91Sjmc.Nm pmap_steal_memory ,
4933378d91Sjmc.Nm pmap_growkernel ,
5033378d91Sjmc.Nm pmap_update ,
5133378d91Sjmc.Nm pmap_collect ,
52*2a69d363Skettenis.Nm pmap_populate ,
53ba8b8a70Smiod.Nm pmap_virtual_space
541c60f1d7Swcobb.Nd machine dependent interface to the MMU
551c60f1d7Swcobb.Sh SYNOPSIS
56dddd2645Sschwarze.In machine/pmap.h
571c60f1d7Swcobb.Sh DESCRIPTION
581c60f1d7SwcobbThe architecture-dependent
591b4a12adSnatano.Nm pmap
601c60f1d7Swcobbmodule describes how the physical mapping is done between the user-processes
611c60f1d7Swcobband kernel virtual addresses and the physical addresses of the main memory,
621c60f1d7Swcobbproviding machine-dependent translation and access tables that are used
631c60f1d7Swcobbdirectly or indirectly by the memory-management hardware.
641c60f1d7SwcobbThe
651b4a12adSnatano.Nm pmap
661c60f1d7Swcobblayer can be viewed as a big array of mapping entries that are indexed by
671c60f1d7Swcobbvirtual address to produce a physical address and flags.
681c60f1d7SwcobbThese flags describe
691c60f1d7Swcobbthe page's protection, whether the page has been referenced or modified and
701c60f1d7Swcobbother characteristics.
711c60f1d7Swcobb.Pp
721c60f1d7SwcobbThe
731b4a12adSnatano.Nm pmap
741c60f1d7Swcobbinterface is consistent across all platforms and hides the way page mappings
751c60f1d7Swcobbare stored.
761c60f1d7Swcobb.Sh INITIALIZATION
771c60f1d7Swcobb.nr nS 1
781c60f1d7Swcobb.Ft void
791c60f1d7Swcobb.Fn pmap_init "void"
801c60f1d7Swcobb.nr nS 0
811c60f1d7Swcobb.Pp
821c60f1d7SwcobbThe
831c60f1d7Swcobb.Fn pmap_init
841c60f1d7Swcobbfunction is called from the machine-independent
85dc534cd0Sjmc.Xr uvm_init 9
861c60f1d7Swcobbinitialization code, when the MMU is enabled.
871c60f1d7Swcobb.Sh PAGE MANAGEMENT
8829bc0c31SmpiModified/referenced information is only tracked for pages managed by UVM
891c60f1d7Swcobb(pages for which a vm_page structure exists).
901c60f1d7SwcobbOnly managed mappings of those pages have modified/referenced tracking.
911c60f1d7SwcobbThe use of unmanaged mappings should be limited to code which may execute
921c60f1d7Swcobbin interrupt context (such as
931c60f1d7Swcobb.Xr malloc 9 )
9429bc0c31Smpior to enter mappings for physical addresses which are not managed by UVM.
951c60f1d7SwcobbThis allows
961b4a12adSnatano.Nm pmap
971c60f1d7Swcobbmodules to avoid blocking interrupts when manipulating data structures or
981c60f1d7Swcobbholding locks.
991c60f1d7SwcobbUnmanaged mappings may only be entered into the kernel's virtual address space.
1001c60f1d7SwcobbThe modified/referenced bits must be tracked on a per-page basis, as they
1011c60f1d7Swcobbare not attributes of a mapping, but attributes of a page.
1021c60f1d7SwcobbTherefore, even after all mappings for a given page have been removed, the
1031c60f1d7Swcobbmodified/referenced bits for that page must be preserved.
10429bc0c31SmpiThe only time the modified/referenced bits may be cleared is when UVM
1051c60f1d7Swcobbexplicitly calls the
1061c60f1d7Swcobb.Fn pmap_clear_modify
1071c60f1d7Swcobband
1081c60f1d7Swcobb.Fn pmap_clear_reference
1091c60f1d7Swcobbfunctions.
1101c60f1d7SwcobbThese functions must also change any internal state necessary to detect
1111c60f1d7Swcobbthe page being modified or referenced again after the modified/referenced
1121c60f1d7Swcobbstate is cleared.
1131c60f1d7Swcobb.Pp
1141c60f1d7SwcobbMappings entered by
1151c60f1d7Swcobb.Fn pmap_enter
1161c60f1d7Swcobbare managed, mappings entered by
1171c60f1d7Swcobb.Fn pmap_kenter_pa
1181c60f1d7Swcobbare not.
1191c60f1d7Swcobb.Sh MAPPING ALLOCATION
1201c60f1d7Swcobb.nr nS 1
1211c60f1d7Swcobb.Ft int
1221c60f1d7Swcobb.Fn pmap_enter "pmap_t pmap" "vaddr_t va" "paddr_t pa" "vm_prot_t prot" \
1231c60f1d7Swcobb               "int flags"
1241c60f1d7Swcobb.Ft void
1251c60f1d7Swcobb.Fn pmap_kenter_pa "vaddr_t va" "paddr_t pa" "vm_prot_t prot"
1261c60f1d7Swcobb.Ft void
12763b69da7Sjmc.Fn pmap_remove "pmap_t pmap" "vaddr_t sva" "vaddr_t eva"
1281c60f1d7Swcobb.Ft void
1291c60f1d7Swcobb.Fn pmap_kremove "vaddr_t va" "vsize_t size"
1301c60f1d7Swcobb.nr nS 0
1311c60f1d7Swcobb.Pp
1321c60f1d7SwcobbThe
1331c60f1d7Swcobb.Fn pmap_enter
1341c60f1d7Swcobbfunction creates a managed mapping for physical page
1351c60f1d7Swcobb.Fa pa
1361c60f1d7Swcobbat the specified virtual address
1371c60f1d7Swcobb.Fa va
1381c60f1d7Swcobbin the target physical map
1391c60f1d7Swcobb.Fa pmap
1401c60f1d7Swcobbwith protection specified by
1411c60f1d7Swcobb.Fa prot :
1421e8cdc2eSderaadt.Bl -tag -width "PROT_WRITE"
1431e8cdc2eSderaadt.It PROT_READ
1441c60f1d7SwcobbThe mapping must allow reading.
1451e8cdc2eSderaadt.It PROT_WRITE
1461c60f1d7SwcobbThe mapping must allow writing.
1471e8cdc2eSderaadt.It PROT_EXEC
1481c60f1d7SwcobbThe page mapped contains instructions that will be executed by the
1491c60f1d7Swcobbprocessor.
1501c60f1d7Swcobb.El
1511c60f1d7Swcobb.Pp
1521c60f1d7SwcobbThe
1531c60f1d7Swcobb.Fa flags
1541c60f1d7Swcobbargument contains protection bits (the same bits used in the
1551c60f1d7Swcobb.Fa prot
15669d211dfSwcobbargument) indicating the type of access that caused the mapping to
15769d211dfSwcobbbe created.
15869d211dfSwcobbThis information may be used to seed modified/referenced
1591c60f1d7Swcobbinformation for the page being mapped, possibly avoiding redundant
1601c60f1d7Swcobbfaults on platforms that track modified/referenced information in
1611c60f1d7Swcobbsoftware.
1621c60f1d7SwcobbOther information provided by
1631c60f1d7Swcobb.Fa flags :
164bafafb4eSjmc.Bl -tag -width "PMAP_CANFAIL"
1651c60f1d7Swcobb.It PMAP_WIRED
1661c60f1d7SwcobbThe mapping being created is a wired mapping.
1671c60f1d7Swcobb.It PMAP_CANFAIL
1681c60f1d7SwcobbThe call to
1691c60f1d7Swcobb.Fn pmap_enter
17069d211dfSwcobbis allowed to fail.
17169d211dfSwcobbIf this flag is not set, and the
1721c60f1d7Swcobb.Fn pmap_enter
1731c60f1d7Swcobbcall is unable to create the mapping, perhaps due to insufficient
1741c60f1d7Swcobbresources, the
1751b4a12adSnatano.Nm pmap
1761c60f1d7Swcobbmodule must panic.
1771c60f1d7Swcobb.El
1781c60f1d7Swcobb.Pp
1791c60f1d7SwcobbThe access type provided in the
1801c60f1d7Swcobb.Fa flags
1811c60f1d7Swcobbargument will never exceed the protection specified by
1821c60f1d7Swcobb.Fa prot .
1831c60f1d7Swcobb.Pp
1841c60f1d7SwcobbThe
1851c60f1d7Swcobb.Fn pmap_enter
1861c60f1d7Swcobbfunction is called by the fault routine to establish a mapping for
1871c60f1d7Swcobbthe page being faulted in.
1881c60f1d7SwcobbIf
1891c60f1d7Swcobb.Fn pmap_enter
1901c60f1d7Swcobbis called to enter a mapping at a virtual address for which a mapping
19185d7c030Sjmcalready exists, the previous mapping must be invalidated.
1921c60f1d7Swcobb.Fn pmap_enter
1931c60f1d7Swcobbis sometimes called to change the protection for a pre-existing mapping,
1941c60f1d7Swcobbor to change the
1951c60f1d7Swcobb.Dq wired
1961c60f1d7Swcobbattribute for a pre-existing mapping.
1971c60f1d7Swcobb.Pp
1981c60f1d7SwcobbThe
1991c60f1d7Swcobb.Fn pmap_kenter_pa
2001c60f1d7Swcobbfunction creates an unmanaged mapping of physical address
2011c60f1d7Swcobb.Fa pa
2021c60f1d7Swcobbat the specified virtual address
2031c60f1d7Swcobb.Fa va
2041c60f1d7Swcobbwith the protection specified by
2051c60f1d7Swcobb.Fa prot .
2061c60f1d7Swcobb.Pp
2071c60f1d7SwcobbThe
2081c60f1d7Swcobb.Fn pmap_remove
2091c60f1d7Swcobbfunction removes the range of virtual addresses
2101c60f1d7Swcobb.Fa sva
2111c60f1d7Swcobbto
2121c60f1d7Swcobb.Fa eva
2131c60f1d7Swcobbfrom
2141c60f1d7Swcobb.Fa pmap ,
2151c60f1d7Swcobbassuming proper alignment.
2161c60f1d7Swcobb.Fn pmap_remove
2171c60f1d7Swcobbis called during an unmap
2181c60f1d7Swcobboperation to remove low-level machine dependent mappings.
2191c60f1d7Swcobb.Pp
2201c60f1d7SwcobbThe
2211c60f1d7Swcobb.Fn pmap_kremove
2221c60f1d7Swcobbfunction removes an unmanaged mapping at virtual address
2235ac49eacShshoexer.Fa va
2245ac49eacShshoexerof size
2251c60f1d7Swcobb.Fa size .
2261c60f1d7Swcobb.Pp
2271c60f1d7SwcobbA call to
2281c60f1d7Swcobb.Fn pmap_update
2291c60f1d7Swcobbmust be made after
2301c60f1d7Swcobb.Fn pmap_kenter_pa
2311c60f1d7Swcobbor
2321c60f1d7Swcobb.Fn pmap_kremove
2331c60f1d7Swcobbto notify the
2341b4a12adSnatano.Nm pmap
2351c60f1d7Swcobblayer that the mappings need to be made correct.
2361c60f1d7Swcobb.Sh ACCESS PROTECTION
2371c60f1d7Swcobb.nr nS 1
2381c60f1d7Swcobb.Ft void
2391c60f1d7Swcobb.Fn pmap_unwire "pmap_t pmap" "vaddr_t va"
2401c60f1d7Swcobb.Ft void
2411c60f1d7Swcobb.Fn pmap_protect "pmap_t pmap" "vaddr_t sva" "vaddr_t eva" "vm_prot_t prot"
2421c60f1d7Swcobb.Ft void
243e82db24dSschwarze.Fn pmap_page_protect "struct vm_page *pg" "vm_prot_t prot"
2441c60f1d7Swcobb.nr nS 0
2451c60f1d7Swcobb.Pp
2461c60f1d7SwcobbThe
2471c60f1d7Swcobb.Fn pmap_unwire
2481c60f1d7Swcobbfunction clears the wired attribute for a map/virtual-address pair.
2491c60f1d7SwcobbThe mapping must already exist in
2501c60f1d7Swcobb.Fa pmap .
2511c60f1d7Swcobb.Pp
2521c60f1d7SwcobbThe
2531c60f1d7Swcobb.Fn pmap_protect
2541c60f1d7Swcobbfunction sets the physical protection on range
2551c60f1d7Swcobb.Fa sva
2561c60f1d7Swcobbto
2571c60f1d7Swcobb.Fa eva ,
2581c60f1d7Swcobbin
2591c60f1d7Swcobb.Fa pmap .
2601c60f1d7Swcobb.Pp
2611c60f1d7SwcobbThe
2621c60f1d7Swcobb.Fn pmap_protect
2631c60f1d7Swcobbfunction is called during a copy-on-write operation to write protect
2641c60f1d7Swcobbcopy-on-write memory, and when paging out a page to remove all mappings
2651c60f1d7Swcobbof a page.
2661c60f1d7SwcobbThe
2671c60f1d7Swcobb.Fn pmap_page_protect
2681c60f1d7Swcobbfunction sets the permission for all mapping to page
2691c60f1d7Swcobb.Fa pg .
2701c60f1d7SwcobbThe
2711c60f1d7Swcobb.Fn pmap_page_protect
2721c60f1d7Swcobbfunction is called before a pageout operation to ensure that all pmap
2731c60f1d7Swcobbreferences to a page are removed.
2741c60f1d7Swcobb.Sh PHYSICAL PAGE-USAGE INFORMATION
2751c60f1d7Swcobb.nr nS 1
2761c60f1d7Swcobb.Ft boolean_t
2771c60f1d7Swcobb.Fn pmap_is_modified "struct vm_page *pg"
2781c60f1d7Swcobb.Ft boolean_t
2791c60f1d7Swcobb.Fn pmap_clear_modify "struct vm_page *pg"
2801c60f1d7Swcobb.Ft boolean_t
2811c60f1d7Swcobb.Fn pmap_is_referenced "struct vm_page *pg"
2821c60f1d7Swcobb.Ft boolean_t
2831c60f1d7Swcobb.Fn pmap_clear_reference "struct vm_page *pg"
2841c60f1d7Swcobb.nr nS 0
2851c60f1d7Swcobb.Pp
2861c60f1d7SwcobbThe
2871c60f1d7Swcobb.Fn pmap_is_modified
2881c60f1d7Swcobband
2891c60f1d7Swcobb.Fn pmap_clear_modify
2901c60f1d7Swcobbfunctions read/set the modify bits on the specified physical page
2911c60f1d7Swcobb.Fa pg .
2921c60f1d7SwcobbThe
2931c60f1d7Swcobb.Fn pmap_is_referenced
2941c60f1d7Swcobband
2951c60f1d7Swcobb.Fn pmap_clear_reference
2961c60f1d7Swcobbfunctions read/set the reference bits on the specified physical page
2971c60f1d7Swcobb.Fa pg .
2981c60f1d7Swcobb.Pp
2991c60f1d7SwcobbThe
3001c60f1d7Swcobb.Fn pmap_is_referenced
3011c60f1d7Swcobband
3021c60f1d7Swcobb.Fn pmap_is_modified
3031c60f1d7Swcobbfunctions are called by the pagedaemon when looking for pages to free.
3041c60f1d7SwcobbThe
3051c60f1d7Swcobb.Fn pmap_clear_referenced
3061c60f1d7Swcobband
3071c60f1d7Swcobb.Fn pmap_clear_modify
3081c60f1d7Swcobbfunctions are called by the pagedaemon to help identification of pages
3091c60f1d7Swcobbthat are no longer in demand.
3101c60f1d7Swcobb.Sh PHYSICAL PAGE INITIALIZATION
3111c60f1d7Swcobb.nr nS 1
3121c60f1d7Swcobb.Ft void
313903746abSwcobb.Fn pmap_copy_page "struct vm_page *src" "struct vm_page *dst"
3141c60f1d7Swcobb.Ft void
315903746abSwcobb.Fn pmap_zero_page "struct vm_page *page"
3161c60f1d7Swcobb.nr nS 0
3171c60f1d7Swcobb.Pp
3181c60f1d7SwcobbThe
3191c60f1d7Swcobb.Fn pmap_copy_page
3201c60f1d7Swcobbfunction copies the content of the physical page
3211c60f1d7Swcobb.Fa src
3221c60f1d7Swcobbto physical page
3231c60f1d7Swcobb.Fa dst .
3241c60f1d7Swcobb.Pp
3251c60f1d7SwcobbThe
3261c60f1d7Swcobb.Fn pmap_zero_page
327903746abSwcobbfunction fills
328903746abSwcobb.Fa page
3291c60f1d7Swcobbwith zeroes.
3301c60f1d7Swcobb.Sh INTERNAL DATA STRUCTURE MANAGEMENT
3311c60f1d7Swcobb.nr nS 1
3321c60f1d7Swcobb.Ft pmap_t
3331c60f1d7Swcobb.Fn pmap_create "void"
3341c60f1d7Swcobb.Ft void
3351c60f1d7Swcobb.Fn pmap_reference "pmap_t pmap"
3361c60f1d7Swcobb.Ft void
3371c60f1d7Swcobb.Fn pmap_destroy "pmap_t pmap"
3381c60f1d7Swcobb.nr nS 0
3391c60f1d7Swcobb.Pp
3401c60f1d7SwcobbThe
3411c60f1d7Swcobb.Fn pmap_create
3421c60f1d7Swcobbfunction creates an instance of the
3431c60f1d7Swcobb.Em pmap
3441c60f1d7Swcobbstructure.
3451c60f1d7Swcobb.Pp
3461c60f1d7SwcobbThe
3471c60f1d7Swcobb.Fn pmap_reference
3481c60f1d7Swcobbfunction increments the reference count on
3491c60f1d7Swcobb.Fa pmap .
3501c60f1d7Swcobb.Pp
3511c60f1d7SwcobbThe
3521c60f1d7Swcobb.Fn pmap_destroy
3531c60f1d7Swcobbfunction decrements the reference count on physical map
3541c60f1d7Swcobb.Fa pmap
35585d7c030Sjmcand retires it from service if the count drops to zero, assuming
3561c60f1d7Swcobbit contains no valid mappings.
3571c60f1d7Swcobb.Sh OPTIONAL FUNCTIONS
3581c60f1d7Swcobb.nr nS 1
359a8b0aa8eSjsing.Ft vaddr_t
3601c60f1d7Swcobb.Fn pmap_steal_memory "vsize_t size" "vaddr_t *vstartp" "vaddr_t *vendp"
3611c60f1d7Swcobb.Ft vaddr_t
3621c60f1d7Swcobb.Fn pmap_growkernel "vaddr_t maxkvaddr"
3631c60f1d7Swcobb.Ft void
3641c60f1d7Swcobb.Fn pmap_update "pmap_t pmap"
3651c60f1d7Swcobb.Ft void
3661c60f1d7Swcobb.Fn pmap_collect "pmap_t pmap"
3671c60f1d7Swcobb.Ft void
368*2a69d363Skettenis.Fn pmap_populate "pmap_t pmap" "vaddr_t va"
369*2a69d363Skettenis.Ft void
3701c60f1d7Swcobb.Fn pmap_virtual_space "vaddr_t *vstartp" "vaddr_t *vendp"
3711c60f1d7Swcobb.nr nS 0
3721c60f1d7Swcobb.Pp
3731c60f1d7SwcobbWired memory allocation before the virtual memory system is bootstrapped
3741c60f1d7Swcobbis accomplished by the
3751c60f1d7Swcobb.Fn pmap_steal_memory
3761c60f1d7Swcobbfunction.
3771c60f1d7SwcobbAfter that point, the kernel memory allocation routines should be used.
3781c60f1d7Swcobb.Pp
3791c60f1d7SwcobbThe
3801c60f1d7Swcobb.Fn pmap_growkernel
3811c60f1d7Swcobbfunction can preallocate kernel page tables to a specified virtual address.
3821c60f1d7Swcobb.Pp
3831c60f1d7SwcobbThe
3841c60f1d7Swcobb.Fn pmap_update
3851c60f1d7Swcobbfunction notifies the
3861b4a12adSnatano.Nm pmap
3871c60f1d7Swcobbmodule to force processing of all delayed actions for all pmaps.
3881c60f1d7Swcobb.Pp
3891c60f1d7SwcobbThe
390*2a69d363Skettenis.Fn pmap_populate
391*2a69d363Skettenisfunction makes sure the resources necessary for mapping the specified
392*2a69d363Skettenisvirtual address
393*2a69d363Skettenis.Fa va
394*2a69d363Skettenisare allocated in the target physical map
395*2a69d363Skettenis.Fa pmap .
396*2a69d363Skettenis.Pp
397*2a69d363SkettenisThe
3981c60f1d7Swcobb.Fn pmap_collect
3991c60f1d7Swcobbfunction informs the
4001b4a12adSnatano.Nm pmap
4011c60f1d7Swcobbmodule that the given
4021c60f1d7Swcobb.Em pmap
4031c60f1d7Swcobbis not expected to be used for some time, giving the
4041b4a12adSnatano.Nm pmap
4051c60f1d7Swcobbmodule a chance to prioritize.
4061c60f1d7SwcobbThe initial bounds of the kernel virtual address space are returned by
4071c60f1d7Swcobb.Fn pmap_virtual_space .
4081c60f1d7Swcobb.Sh SEE ALSO
40969d211dfSwcobb.Xr fork 2 ,
410dc534cd0Sjmc.Xr uvm_init 9
4111c60f1d7Swcobb.Sh HISTORY
4121c60f1d7SwcobbThe
4131c60f1d7Swcobb.Bx 4.4
4141b4a12adSnatano.Nm pmap
4151c60f1d7Swcobbmodule is based on Mach 3.0.
41629bc0c31SmpiThe introduction of UVM
4171c60f1d7Swcobbleft the
4181b4a12adSnatano.Nm pmap
4191c60f1d7Swcobbinterface unchanged for the most part.
420601d79cdSjmc.Sh BUGS
421601d79cdSjmcIfdefs must be documented.
422601d79cdSjmc.Pp
423601d79cdSjmc.Fn pmap_update
424601d79cdSjmcshould be mandatory.
425