From b5b061b75beabed75552bc163a30933c7a602779 Mon Sep 17 00:00:00 2001 From: alc Date: Fri, 6 Mar 2009 17:40:58 +0000 Subject: If the PDE is known, then use the direct mapping instead of the recursive mapping to access the PTE. --- sys/amd64/amd64/pmap.c | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) (limited to 'sys/amd64') 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) -- cgit v1.1