summaryrefslogtreecommitdiffstats
path: root/sys/amd64
diff options
context:
space:
mode:
authoralc <alc@FreeBSD.org>2009-03-06 17:40:58 +0000
committeralc <alc@FreeBSD.org>2009-03-06 17:40:58 +0000
commitb5b061b75beabed75552bc163a30933c7a602779 (patch)
tree54a22d1c215bd762d37650b31d858b4244f8d0ed /sys/amd64
parenta2af9f1993054fa9f9c5ce415f8032558619467c (diff)
downloadFreeBSD-src-b5b061b75beabed75552bc163a30933c7a602779.zip
FreeBSD-src-b5b061b75beabed75552bc163a30933c7a602779.tar.gz
If the PDE is known, then use the direct mapping instead of the recursive
mapping to access the PTE.
Diffstat (limited to 'sys/amd64')
-rw-r--r--sys/amd64/amd64/pmap.c8
1 files changed, 5 insertions, 3 deletions
diff --git a/sys/amd64/amd64/pmap.c b/sys/amd64/amd64/pmap.c
index 6f66042..3c7e284 100644
--- a/sys/amd64/amd64/pmap.c
+++ b/sys/amd64/amd64/pmap.c
@@ -3801,7 +3801,9 @@ pmap_remove_pages(pmap_t pmap)
if ((tpte & PG_PS) != 0)
pte = pde;
else {
- pte = vtopte(pv->pv_va);
+ pte = (pt_entry_t *)PHYS_TO_DMAP(tpte &
+ PG_FRAME);
+ pte = &pte[pmap_pte_index(pv->pv_va)];
tpte = *pte & ~PG_PTE_PAT;
}
@@ -4494,7 +4496,7 @@ pmap_change_attr_locked(vm_offset_t va, vm_size_t size, int mode)
if (!pmap_demote_pde(kernel_pmap, pde, tmpva))
return (ENOMEM);
}
- pte = vtopte(tmpva);
+ pte = pmap_pde_to_pte(pde, tmpva);
if (*pte == 0)
return (EINVAL);
tmpva += PAGE_SIZE;
@@ -4570,7 +4572,7 @@ pmap_change_attr_locked(vm_offset_t va, vm_size_t size, int mode)
} else {
if (cache_bits_pte < 0)
cache_bits_pte = pmap_cache_bits(mode, 0);
- pte = vtopte(tmpva);
+ pte = pmap_pde_to_pte(pde, tmpva);
if ((*pte & PG_PTE_CACHE) != cache_bits_pte) {
pmap_pte_attr(pte, cache_bits_pte);
if (!changed)
OpenPOWER on IntegriCloud