diff options
author | alc <alc@FreeBSD.org> | 2004-12-04 22:02:31 +0000 |
---|---|---|
committer | alc <alc@FreeBSD.org> | 2004-12-04 22:02:31 +0000 |
commit | dbfbcad51b2a3551d6fc10b02f5a0e4bab1240a0 (patch) | |
tree | ccb38951495ac1c3ff6ce6e2659d3489f73d1b2c /sys/amd64 | |
parent | ca88614a1e8bc6073f9ffe90fd1618da1d357929 (diff) | |
download | FreeBSD-src-dbfbcad51b2a3551d6fc10b02f5a0e4bab1240a0.zip FreeBSD-src-dbfbcad51b2a3551d6fc10b02f5a0e4bab1240a0.tar.gz |
Replace (inlined) pmap_pte() calls with smaller, faster code where
possible, such as the inner loop of pmap_copy().
Remove two comments that apply to i386 but not amd64.
Diffstat (limited to 'sys/amd64')
-rw-r--r-- | sys/amd64/amd64/pmap.c | 14 |
1 files changed, 7 insertions, 7 deletions
diff --git a/sys/amd64/amd64/pmap.c b/sys/amd64/amd64/pmap.c index 75596b5..a19c721 100644 --- a/sys/amd64/amd64/pmap.c +++ b/sys/amd64/amd64/pmap.c @@ -802,7 +802,7 @@ pmap_extract(pmap_t pmap, vm_offset_t va) PMAP_UNLOCK(pmap); return rtval; } - pte = pmap_pte(pmap, va); + pte = pmap_pde_to_pte(pdep, va); rtval = (*pte & PG_FRAME) | (va & PAGE_MASK); } } @@ -836,7 +836,7 @@ pmap_extract_and_hold(pmap_t pmap, vm_offset_t va, vm_prot_t prot) vm_page_hold(m); } } else { - pte = *pmap_pte(pmap, va); + pte = *pmap_pde_to_pte(pdep, va); if ((pte & PG_V) && ((pte & PG_RW) || (prot & VM_PROT_WRITE) == 0)) { m = PHYS_TO_VM_PAGE(pte & PG_FRAME); @@ -1612,8 +1612,7 @@ pmap_remove(pmap_t pmap, vm_offset_t sva, vm_offset_t eva) ptpaddr = *pde; /* - * Weed out invalid mappings. Note: we assume that the page - * directory table is always allocated, and in kernel virtual. + * Weed out invalid mappings. */ if (ptpaddr == 0) continue; @@ -1765,8 +1764,7 @@ pmap_protect(pmap_t pmap, vm_offset_t sva, vm_offset_t eva, vm_prot_t prot) ptpaddr = *pde; /* - * Weed out invalid mappings. Note: we assume that the page - * directory table is always allocated, and in kernel virtual. + * Weed out invalid mappings. */ if (ptpaddr == 0) continue; @@ -2339,7 +2337,9 @@ pmap_copy(pmap_t dst_pmap, pmap_t src_pmap, vm_offset_t dst_addr, vm_size_t len, M_NOWAIT); if (dstmpte == NULL) break; - dst_pte = pmap_pte(dst_pmap, addr); + dst_pte = (pt_entry_t *) + PHYS_TO_DMAP(VM_PAGE_TO_PHYS(dstmpte)); + dst_pte = &dst_pte[pmap_pte_index(addr)]; if (*dst_pte == 0) { /* * Clear the modified and |