diff options
author | alc <alc@FreeBSD.org> | 2013-09-20 04:30:18 +0000 |
---|---|---|
committer | alc <alc@FreeBSD.org> | 2013-09-20 04:30:18 +0000 |
commit | 88a4d0f31a9eb87f44806242b097f545ae385c34 (patch) | |
tree | b6ca037877d42dd75bff7cafcabdc22bb90a6901 /sys/i386 | |
parent | 5e1eb8fc155e3e63149905020980fa61b215f804 (diff) | |
download | FreeBSD-src-88a4d0f31a9eb87f44806242b097f545ae385c34.zip FreeBSD-src-88a4d0f31a9eb87f44806242b097f545ae385c34.tar.gz |
The pmap function pmap_clear_reference() is no longer used. Remove it.
pmap_clear_reference() has had exactly one caller in the kernel for
several years, more precisely, since FreeBSD 8. Now, that call no
longer exists.
Approved by: re (kib)
Sponsored by: EMC / Isilon Storage Division
Diffstat (limited to 'sys/i386')
-rw-r--r-- | sys/i386/i386/pmap.c | 67 | ||||
-rw-r--r-- | sys/i386/xen/pmap.c | 35 |
2 files changed, 0 insertions, 102 deletions
diff --git a/sys/i386/i386/pmap.c b/sys/i386/i386/pmap.c index c9f327c..64bf1a3 100644 --- a/sys/i386/i386/pmap.c +++ b/sys/i386/i386/pmap.c @@ -5049,73 +5049,6 @@ small_mappings: } /* - * pmap_clear_reference: - * - * Clear the reference bit on the specified physical page. - */ -void -pmap_clear_reference(vm_page_t m) -{ - struct md_page *pvh; - pv_entry_t next_pv, pv; - pmap_t pmap; - pd_entry_t oldpde, *pde; - pt_entry_t *pte; - vm_offset_t va; - - KASSERT((m->oflags & VPO_UNMANAGED) == 0, - ("pmap_clear_reference: page %p is not managed", m)); - rw_wlock(&pvh_global_lock); - sched_pin(); - if ((m->flags & PG_FICTITIOUS) != 0) - goto small_mappings; - pvh = pa_to_pvh(VM_PAGE_TO_PHYS(m)); - TAILQ_FOREACH_SAFE(pv, &pvh->pv_list, pv_next, next_pv) { - va = pv->pv_va; - pmap = PV_PMAP(pv); - PMAP_LOCK(pmap); - pde = pmap_pde(pmap, va); - oldpde = *pde; - if ((oldpde & PG_A) != 0) { - if (pmap_demote_pde(pmap, pde, va)) { - /* - * Remove the mapping to a single page so - * that a subsequent access may repromote. - * Since the underlying page table page is - * fully populated, this removal never frees - * a page table page. - */ - va += VM_PAGE_TO_PHYS(m) - (oldpde & - PG_PS_FRAME); - pmap_remove_page(pmap, va, NULL); - } - } - PMAP_UNLOCK(pmap); - } -small_mappings: - TAILQ_FOREACH(pv, &m->md.pv_list, pv_next) { - pmap = PV_PMAP(pv); - PMAP_LOCK(pmap); - pde = pmap_pde(pmap, pv->pv_va); - KASSERT((*pde & PG_PS) == 0, ("pmap_clear_reference: found" - " a 4mpage in page %p's pv list", m)); - pte = pmap_pte_quick(pmap, pv->pv_va); - if ((*pte & PG_A) != 0) { - /* - * Regardless of whether a pte is 32 or 64 bits - * in size, PG_A is among the least significant - * 32 bits. - */ - atomic_clear_int((u_int *)pte, PG_A); - pmap_invalidate_page(pmap, pv->pv_va); - } - PMAP_UNLOCK(pmap); - } - sched_unpin(); - rw_wunlock(&pvh_global_lock); -} - -/* * Miscellaneous support routines follow */ diff --git a/sys/i386/xen/pmap.c b/sys/i386/xen/pmap.c index 3abe7ef..9f3e8bb 100644 --- a/sys/i386/xen/pmap.c +++ b/sys/i386/xen/pmap.c @@ -4024,41 +4024,6 @@ pmap_clear_modify(vm_page_t m) } /* - * pmap_clear_reference: - * - * Clear the reference bit on the specified physical page. - */ -void -pmap_clear_reference(vm_page_t m) -{ - pv_entry_t pv; - pmap_t pmap; - pt_entry_t *pte; - - KASSERT((m->oflags & VPO_UNMANAGED) == 0, - ("pmap_clear_reference: page %p is not managed", m)); - rw_wlock(&pvh_global_lock); - sched_pin(); - TAILQ_FOREACH(pv, &m->md.pv_list, pv_next) { - pmap = PV_PMAP(pv); - PMAP_LOCK(pmap); - pte = pmap_pte_quick(pmap, pv->pv_va); - if ((*pte & PG_A) != 0) { - /* - * Regardless of whether a pte is 32 or 64 bits - * in size, PG_A is among the least significant - * 32 bits. - */ - PT_SET_VA_MA(pte, *pte & ~PG_A, FALSE); - pmap_invalidate_page(pmap, pv->pv_va); - } - PMAP_UNLOCK(pmap); - } - sched_unpin(); - rw_wunlock(&pvh_global_lock); -} - -/* * Miscellaneous support routines follow */ |