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