summaryrefslogtreecommitdiffstats
path: root/sys
diff options
context:
space:
mode:
Diffstat (limited to 'sys')
-rw-r--r--sys/amd64/amd64/pmap.c9
-rw-r--r--sys/i386/i386/pmap.c11
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);
OpenPOWER on IntegriCloud