diff options
author | alc <alc@FreeBSD.org> | 2003-08-28 23:12:28 +0000 |
---|---|---|
committer | alc <alc@FreeBSD.org> | 2003-08-28 23:12:28 +0000 |
commit | bc8072861ff47069109ea6db495796fec0acb745 (patch) | |
tree | 4c4c165bedd31bee5005f5d1334f4e3b8c0c0267 /sys | |
parent | 3781650014cf14e8e73384604ae5d0689cc158bf (diff) | |
download | FreeBSD-src-bc8072861ff47069109ea6db495796fec0acb745.zip FreeBSD-src-bc8072861ff47069109ea6db495796fec0acb745.tar.gz |
Eliminate the direct uses of vm_page_lookup() on the pte object. Instead,
apply PHYS_TO_VM_PAGE() to the physical address obtained from the page
table.
(This is based upon similar changes made to the amd64 and i386 pmaps and
a part of a long-term campaign to eliminate pte objects.)
Tested by: wilko
Diffstat (limited to 'sys')
-rw-r--r-- | sys/alpha/alpha/pmap.c | 41 |
1 files changed, 8 insertions, 33 deletions
diff --git a/sys/alpha/alpha/pmap.c b/sys/alpha/alpha/pmap.c index 739e7bc..10a2df3 100644 --- a/sys/alpha/alpha/pmap.c +++ b/sys/alpha/alpha/pmap.c @@ -340,7 +340,6 @@ static vm_page_t pmap_allocpte(pmap_t pmap, vm_offset_t va); static int pmap_release_free_page(pmap_t pmap, vm_page_t p); static vm_page_t _pmap_allocpte(pmap_t pmap, unsigned ptepindex); -static vm_page_t pmap_page_lookup(vm_object_t object, vm_pindex_t pindex); static int pmap_unuse_pt(pmap_t, vm_offset_t, vm_page_t); #ifdef SMP static void pmap_invalidate_page_action(void *arg); @@ -914,22 +913,6 @@ pmap_map(vm_offset_t *virt, vm_offset_t start, vm_offset_t end, int prot) return ALPHA_PHYS_TO_K0SEG(start); } - -static vm_page_t -pmap_page_lookup(vm_object_t object, vm_pindex_t pindex) -{ - vm_page_t m; -retry: - m = vm_page_lookup(object, pindex); - if (m != NULL) { - vm_page_lock_queues(); - if (vm_page_sleep_if_busy(m, FALSE, "pplookp")) - goto retry; - vm_page_unlock_queues(); - } - return m; -} - /*************************************************** * Page table page management routines..... ***************************************************/ @@ -967,10 +950,8 @@ _pmap_unwire_pte_hold(pmap_t pmap, vm_offset_t va, vm_page_t m) if (m->pindex < NUSERLEV3MAPS) { /* unhold the level 2 page table */ vm_page_t lev2pg; - lev2pg = vm_page_lookup(pmap->pm_pteobj, - NUSERLEV3MAPS + pmap_lev1_index(va)); - while (vm_page_sleep_if_busy(lev2pg, FALSE, "pulook")) - vm_page_lock_queues(); + + lev2pg = PHYS_TO_VM_PAGE(pmap_pte_pa(pmap_lev1pte(pmap, va))); vm_page_unhold(lev2pg); if (lev2pg->hold_count == 0) _pmap_unwire_pte_hold(pmap, va, lev2pg); @@ -1027,9 +1008,7 @@ pmap_unuse_pt(pmap_t pmap, vm_offset_t va, vm_page_t mpte) (pmap->pm_ptphint->pindex == ptepindex)) { mpte = pmap->pm_ptphint; } else { - while ((mpte = vm_page_lookup(pmap->pm_pteobj, ptepindex)) != NULL && - vm_page_sleep_if_busy(mpte, FALSE, "pulook")) - vm_page_lock_queues(); + mpte = PHYS_TO_VM_PAGE(pmap_pte_pa(pmap_lev2pte(pmap, va))); pmap->pm_ptphint = mpte; } } @@ -1240,9 +1219,9 @@ _pmap_allocpte(pmap, ptepindex) if (!pmap_pte_v(l1pte)) _pmap_allocpte(pmap, NUSERLEV3MAPS + l1index); else { - vm_page_t l2page = - pmap_page_lookup(pmap->pm_pteobj, - NUSERLEV3MAPS + l1index); + vm_page_t l2page; + + l2page = PHYS_TO_VM_PAGE(pmap_pte_pa(l1pte)); l2page->hold_count++; } l2map = (pt_entry_t*) ALPHA_PHYS_TO_K0SEG(pmap_pte_pa(l1pte)); @@ -1297,7 +1276,7 @@ pmap_allocpte(pmap_t pmap, vm_offset_t va) (pmap->pm_ptphint->pindex == ptepindex)) { m = pmap->pm_ptphint; } else { - m = pmap_page_lookup(pmap->pm_pteobj, ptepindex); + m = PHYS_TO_VM_PAGE(pmap_pte_pa(lev2pte)); pmap->pm_ptphint = m; } m->hold_count++; @@ -1999,7 +1978,6 @@ pmap_enter_quick(pmap_t pmap, vm_offset_t va, vm_page_t m, vm_page_t mpte) if (mpte && (mpte->pindex == ptepindex)) { mpte->hold_count++; } else { -retry: /* * Get the level 2 entry */ @@ -2014,12 +1992,9 @@ retry: (pmap->pm_ptphint->pindex == ptepindex)) { mpte = pmap->pm_ptphint; } else { - mpte = pmap_page_lookup(pmap->pm_pteobj, - ptepindex); + mpte = PHYS_TO_VM_PAGE(pmap_pte_pa(l2pte)); pmap->pm_ptphint = mpte; } - if (mpte == NULL) - goto retry; mpte->hold_count++; } else { mpte = _pmap_allocpte(pmap, ptepindex); |