MCPcopy Create free account
hub / github.com/F-Stack/f-stack / pmap_extract

Function pmap_extract

freebsd/amd64/amd64/pmap.c:3665–3696  ·  view source on GitHub ↗

* Routine: pmap_extract * Function: * Extract the physical page address associated * with the given map/virtual_address pair. */

Source from the content-addressed store, hash-verified

3663 * with the given map/virtual_address pair.
3664 */
3665vm_paddr_t
3666pmap_extract(pmap_t pmap, vm_offset_t va)
3667{
3668 pdp_entry_t *pdpe;
3669 pd_entry_t *pde;
3670 pt_entry_t *pte, PG_V;
3671 vm_paddr_t pa;
3672
3673 pa = 0;
3674 PG_V = pmap_valid_bit(pmap);
3675 PMAP_LOCK(pmap);
3676 pdpe = pmap_pdpe(pmap, va);
3677 if (pdpe != NULL && (*pdpe & PG_V) != 0) {
3678 if ((*pdpe & PG_PS) != 0)
3679 pa = (*pdpe & PG_PS_FRAME) | (va & PDPMASK);
3680 else {
3681 pde = pmap_pdpe_to_pde(pdpe, va);
3682 if ((*pde & PG_V) != 0) {
3683 if ((*pde & PG_PS) != 0) {
3684 pa = (*pde & PG_PS_FRAME) |
3685 (va & PDRMASK);
3686 } else {
3687 pte = pmap_pde_to_pte(pde, va);
3688 pa = (*pte & PG_FRAME) |
3689 (va & PAGE_MASK);
3690 }
3691 }
3692 }
3693 }
3694 PMAP_UNLOCK(pmap);
3695 return (pa);
3696}
3697
3698/*
3699 * Routine: pmap_extract_and_hold

Callers 1

memrwFunction · 0.70

Calls 4

pmap_valid_bitFunction · 0.85
pmap_pdpeFunction · 0.85
pmap_pdpe_to_pdeFunction · 0.70
pmap_pde_to_pteFunction · 0.70

Tested by

no test coverage detected