* Routine: pmap_extract * Function: * Extract the physical page address associated * with the given map/virtual_address pair. */
| 1954 | * with the given map/virtual_address pair. |
| 1955 | */ |
| 1956 | vm_paddr_t |
| 1957 | pmap_extract(pmap_t pmap, vm_offset_t va) |
| 1958 | { |
| 1959 | vm_paddr_t pa; |
| 1960 | pt1_entry_t pte1; |
| 1961 | pt2_entry_t *pte2p; |
| 1962 | |
| 1963 | PMAP_LOCK(pmap); |
| 1964 | pte1 = pte1_load(pmap_pte1(pmap, va)); |
| 1965 | if (pte1_is_section(pte1)) |
| 1966 | pa = pte1_pa(pte1) | (va & PTE1_OFFSET); |
| 1967 | else if (pte1_is_link(pte1)) { |
| 1968 | pte2p = pmap_pte2(pmap, va); |
| 1969 | pa = pte2_pa(pte2_load(pte2p)) | (va & PTE2_OFFSET); |
| 1970 | pmap_pte2_release(pte2p); |
| 1971 | } else |
| 1972 | pa = 0; |
| 1973 | PMAP_UNLOCK(pmap); |
| 1974 | return (pa); |
| 1975 | } |
| 1976 | |
| 1977 | /* |
| 1978 | * Routine: pmap_extract_and_hold |
no test coverage detected