diff options
Diffstat (limited to 'sys')
-rw-r--r-- | sys/amd64/amd64/pmap.c | 9 | ||||
-rw-r--r-- | sys/i386/i386/pmap.c | 11 |
2 files changed, 9 insertions, 11 deletions
diff --git a/sys/amd64/amd64/pmap.c b/sys/amd64/amd64/pmap.c index 61e5804..6e92d23 100644 --- a/sys/amd64/amd64/pmap.c +++ b/sys/amd64/amd64/pmap.c @@ -986,13 +986,12 @@ pmap_extract(pmap_t pmap, vm_offset_t va) if (pdep != NULL) { pde = *pdep; if (pde) { - if ((pde & PG_PS) != 0) { + if ((pde & PG_PS) != 0) rtval = (pde & PG_PS_FRAME) | (va & PDRMASK); - PMAP_UNLOCK(pmap); - return rtval; + else { + pte = pmap_pde_to_pte(pdep, va); + rtval = (*pte & PG_FRAME) | (va & PAGE_MASK); } - pte = pmap_pde_to_pte(pdep, va); - rtval = (*pte & PG_FRAME) | (va & PAGE_MASK); } } PMAP_UNLOCK(pmap); diff --git a/sys/i386/i386/pmap.c b/sys/i386/i386/pmap.c index 6eb6cef..a9c0cb7 100644 --- a/sys/i386/i386/pmap.c +++ b/sys/i386/i386/pmap.c @@ -1063,14 +1063,13 @@ pmap_extract(pmap_t pmap, vm_offset_t va) PMAP_LOCK(pmap); pde = pmap->pm_pdir[va >> PDRSHIFT]; if (pde != 0) { - if ((pde & PG_PS) != 0) { + if ((pde & PG_PS) != 0) rtval = (pde & PG_PS_FRAME) | (va & PDRMASK); - PMAP_UNLOCK(pmap); - return rtval; + else { + pte = pmap_pte(pmap, va); + rtval = (*pte & PG_FRAME) | (va & PAGE_MASK); + pmap_pte_release(pte); } - pte = pmap_pte(pmap, va); - rtval = (*pte & PG_FRAME) | (va & PAGE_MASK); - pmap_pte_release(pte); } PMAP_UNLOCK(pmap); return (rtval); |