Skip site navigation (1)Skip section navigation (2)

FreeBSD Manual Pages


home | help
PMAP_ENTER(9)	       FreeBSD Kernel Developer's Manual	 PMAP_ENTER(9)

     pmap_enter	-- insert a virtual page into a	physical map

     #include <sys/param.h>
     #include <vm/vm.h>
     #include <vm/pmap.h>

     pmap_enter(pmap_t pmap, vm_offset_t va, vm_page_t m, vm_prot_t prot,
	 u_int flags, int8_t psind);

     The pmap_enter() function creates a mapping in the	physical map pmap from
     the virtual address va to the physical page m with	the protection prot.
     Any previous mapping at the virtual address va is destroyed.

     The flags argument	may have the following values:

     VM_PROT_READ	 A read	access to the given virtual address triggered
			 the call.

     VM_PROT_WRITE	 A write access	to the given virtual address triggered
			 the call.

     VM_PROT_EXECUTE	 An execute access to the given	virtual	address	trig-
			 gered the call.

     PMAP_ENTER_WIRED	 The mapping should be marked as wired.

     PMAP_ENTER_NOSLEEP	 This function may not sleep during creation of	the
			 mapping.  If the mapping cannot be created without
			 sleeping, an appropriate Mach VM error	is returned.
     If	the PMAP_ENTER_NOSLEEP flag is not specified, this function must cre-
     ate the requested mapping before returning.  It may not fail.  In order
     to	create the requested mapping, this function may	destroy	any non-wired
     mapping in	any pmap.

     The psind parameter specifies the page size that should be	used by	the
     mapping.  The supported page sizes	are described by the global array
     pagesizes[].  The desired page size is specified by passing the index of
     the array element that equals the desired page size.

     When the pmap_enter() function destroys or	updates	a managed mapping, in-
     cluding an	existing mapping at virtual address va,	it updates the vm_page
     structure corresponding to	the previously mapped physical page.  If the
     physical page was accessed	through	the managed mapping, then the vm_page
     structure's PGA_REFERENCED	aflag is set.  If the physical page was	modi-
     fied through the managed mapping, then the	vm_page_dirty()	function is
     called on the vm_page structure.

     The PGA_WRITEABLE aflag must be set for the page m	if the new mapping is
     managed and writeable.  It	is advised to clear PGA_WRITEABLE for de-
     stroyed mappings if the implementation can	ensure that no other writeable
     managed mappings for the previously mapped	pages exist.

     If	the request modifies an	existing mapping to use	a different physical
     page, an implementation of	pmap_enter must	invalidate the previous	map-
     ping before installing the	new one.  This ensures that all	threads	shar-
     ing the pmap keep a consistent view of the	mapping, which is necessary
     for the correct handling of CoW (copy on write) faults.

     If	the page m is managed, the page	must be	busied by the caller or	the
     owning object must	be locked.  In the later case, the PMAP_ENTER_NOSLEEP
     must be specified by the caller.

     The pmap_enter() function must handle the multiprocessor TLB consistency
     for the given address.

     On	arm and	i386 architectures the existing	implementation of the
     pmap_enter	function is incomplete,	only value 0 for psind is supported.
     Other supported architectures, except amd64, have pagesizes[] array of
     size 1.

     If	successful, the	pmap_enter() function returns KERN_SUCCESS.  If	the
     PMAP_ENTER_NOSLEEP	flag was specified and the resources required for the
     mapping cannot be acquired	without	sleeping, KERN_RESOURCE_SHORTAGE is


     This manual page was first	written	by Bruce M Simpson <> and
     then rewritten by
     Alan Cox <>	and
     Konstantin	Belousov <>.

FreeBSD	13.0		       December	16, 2018		  FreeBSD 13.0


Want to link to this manual page? Use this URL:

home | help