pmap_enter(9) 맨 페이지 - 윈디하나의 솔라나라

개요

섹션
맨 페이지 이름
검색(S)

pmap_enter(9)

PMAP_ENTER(9)            BSD Kernel Developer's Manual           PMAP_ENTER(9)

NAME
     pmap_enter — insert a virtual page into a physical map

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

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

DESCRIPTION
     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,
     including 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 modified through the managed mapping, then the vm_page_dirty() func‐
     tion 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
     destroyed mappings if the implementation can ensure that no other write‐
     able managed mappings for the previously mapped pages exist.

     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.

NOTES
     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.

RETURN VALUES
     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
     returned.

SEE ALSO
     pmap(9)

AUTHORS
     This manual page was first written by Bruce M Simpson <bms@spc.org> and
     then rewritten by
     Alan Cox <alc@FreeBSD.org> and
     Konstantin Belousov <kib@FreeBSD.org>.

BSD                            February 16, 2018                           BSD
맨 페이지 내용의 저작권은 맨 페이지 작성자에게 있습니다.
RSS ATOM XHTML 5 CSS3