Author: alc
Date: Fri Sep 20 04:30:18 2013
New Revision: 255724
URL: http://svnweb.freebsd.org/changeset/base/255724

Log:
  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

Modified:
  head/sys/amd64/amd64/pmap.c
  head/sys/arm/arm/pmap-v6.c
  head/sys/arm/arm/pmap.c
  head/sys/i386/i386/pmap.c
  head/sys/i386/xen/pmap.c
  head/sys/ia64/ia64/pmap.c
  head/sys/mips/mips/pmap.c
  head/sys/powerpc/aim/mmu_oea.c
  head/sys/powerpc/aim/mmu_oea64.c
  head/sys/powerpc/booke/pmap.c
  head/sys/powerpc/powerpc/pmap_dispatch.c
  head/sys/sparc64/sparc64/pmap.c
  head/sys/vm/pmap.h

Modified: head/sys/amd64/amd64/pmap.c
==============================================================================
--- head/sys/amd64/amd64/pmap.c Fri Sep 20 01:55:37 2013        (r255723)
+++ head/sys/amd64/amd64/pmap.c Fri Sep 20 04:30:18 2013        (r255724)
@@ -5382,66 +5382,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;
-       pmap_t pmap;
-       pv_entry_t next_pv, pv;
-       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);
-       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) {
-               pmap = PV_PMAP(pv);
-               PMAP_LOCK(pmap);
-               va = pv->pv_va;
-               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, pde, 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 2mpage in page %p's pv list", m));
-               pte = pmap_pde_to_pte(pde, pv->pv_va);
-               if (*pte & PG_A) {
-                       atomic_clear_long(pte, PG_A);
-                       pmap_invalidate_page(pmap, pv->pv_va);
-               }
-               PMAP_UNLOCK(pmap);
-       }
-       rw_wunlock(&pvh_global_lock);
-}
-
-/*
  * Miscellaneous support routines follow
  */
 

Modified: head/sys/arm/arm/pmap-v6.c
==============================================================================
--- head/sys/arm/arm/pmap-v6.c  Fri Sep 20 01:55:37 2013        (r255723)
+++ head/sys/arm/arm/pmap-v6.c  Fri Sep 20 04:30:18 2013        (r255724)
@@ -4905,22 +4905,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)
-{
-
-       KASSERT((m->oflags & VPO_UNMANAGED) == 0,
-           ("pmap_clear_reference: page %p is not managed", m));
-       if (pmap_is_referenced(m))
-               pmap_clearbit(m, PVF_REF);
-}
-
-
-/*
  * Clear the write and modified bits in each of the given page's mappings.
  */
 void

Modified: head/sys/arm/arm/pmap.c
==============================================================================
--- head/sys/arm/arm/pmap.c     Fri Sep 20 01:55:37 2013        (r255723)
+++ head/sys/arm/arm/pmap.c     Fri Sep 20 04:30:18 2013        (r255724)
@@ -4591,21 +4591,6 @@ pmap_is_referenced(vm_page_t m)
        return ((m->md.pvh_attrs & PVF_REF) != 0);
 }
 
-/*
- *     pmap_clear_reference:
- *
- *     Clear the reference bit on the specified physical page.
- */
-void
-pmap_clear_reference(vm_page_t m)
-{
-
-       KASSERT((m->oflags & VPO_UNMANAGED) == 0,
-           ("pmap_clear_reference: page %p is not managed", m));
-       if (m->md.pvh_attrs & PVF_REF)
-               pmap_clearbit(m, PVF_REF);
-}
-
 
 /*
  * Clear the write and modified bits in each of the given page's mappings.

Modified: head/sys/i386/i386/pmap.c
==============================================================================
--- head/sys/i386/i386/pmap.c   Fri Sep 20 01:55:37 2013        (r255723)
+++ head/sys/i386/i386/pmap.c   Fri Sep 20 04:30:18 2013        (r255724)
@@ -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
  */
 

Modified: head/sys/i386/xen/pmap.c
==============================================================================
--- head/sys/i386/xen/pmap.c    Fri Sep 20 01:55:37 2013        (r255723)
+++ head/sys/i386/xen/pmap.c    Fri Sep 20 04:30:18 2013        (r255724)
@@ -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
  */
 

Modified: head/sys/ia64/ia64/pmap.c
==============================================================================
--- head/sys/ia64/ia64/pmap.c   Fri Sep 20 01:55:37 2013        (r255723)
+++ head/sys/ia64/ia64/pmap.c   Fri Sep 20 04:30:18 2013        (r255724)
@@ -2394,37 +2394,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)
-{
-       struct ia64_lpte *pte;
-       pmap_t oldpmap, pmap;
-       pv_entry_t pv;
-
-       KASSERT((m->oflags & VPO_UNMANAGED) == 0,
-           ("pmap_clear_reference: page %p is not managed", m));
-       rw_wlock(&pvh_global_lock);
-       TAILQ_FOREACH(pv, &m->md.pv_list, pv_list) {
-               pmap = PV_PMAP(pv);
-               PMAP_LOCK(pmap);
-               oldpmap = pmap_switch(pmap);
-               pte = pmap_find_vhpt(pv->pv_va);
-               KASSERT(pte != NULL, ("pte"));
-               if (pmap_accessed(pte)) {
-                       pmap_clear_accessed(pte);
-                       pmap_invalidate_page(pv->pv_va);
-               }
-               pmap_switch(oldpmap);
-               PMAP_UNLOCK(pmap);
-       }
-       rw_wunlock(&pvh_global_lock);
-}
-
-/*
  * Clear the write and modified bits in each of the given page's mappings.
  */
 void

Modified: head/sys/mips/mips/pmap.c
==============================================================================
--- head/sys/mips/mips/pmap.c   Fri Sep 20 01:55:37 2013        (r255723)
+++ head/sys/mips/mips/pmap.c   Fri Sep 20 04:30:18 2013        (r255724)
@@ -3053,24 +3053,6 @@ pmap_is_referenced(vm_page_t m)
 }
 
 /*
- *     pmap_clear_reference:
- *
- *     Clear the reference bit on the specified physical page.
- */
-void
-pmap_clear_reference(vm_page_t m)
-{
-
-       KASSERT((m->oflags & VPO_UNMANAGED) == 0,
-           ("pmap_clear_reference: page %p is not managed", m));
-       rw_wlock(&pvh_global_lock);
-       if (m->md.pv_flags & PV_TABLE_REF) {
-               m->md.pv_flags &= ~PV_TABLE_REF;
-       }
-       rw_wunlock(&pvh_global_lock);
-}
-
-/*
  * Miscellaneous support routines follow
  */
 

Modified: head/sys/powerpc/aim/mmu_oea.c
==============================================================================
--- head/sys/powerpc/aim/mmu_oea.c      Fri Sep 20 01:55:37 2013        
(r255723)
+++ head/sys/powerpc/aim/mmu_oea.c      Fri Sep 20 04:30:18 2013        
(r255724)
@@ -278,7 +278,6 @@ int         moea_pte_spill(vm_offset_t);
  */
 void moea_change_wiring(mmu_t, pmap_t, vm_offset_t, boolean_t);
 void moea_clear_modify(mmu_t, vm_page_t);
-void moea_clear_reference(mmu_t, vm_page_t);
 void moea_copy_page(mmu_t, vm_page_t, vm_page_t);
 void moea_copy_pages(mmu_t mmu, vm_page_t *ma, vm_offset_t a_offset,
     vm_page_t *mb, vm_offset_t b_offset, int xfersize);
@@ -328,7 +327,6 @@ struct pmap_md * moea_scan_md(mmu_t mmu,
 static mmu_method_t moea_methods[] = {
        MMUMETHOD(mmu_change_wiring,    moea_change_wiring),
        MMUMETHOD(mmu_clear_modify,     moea_clear_modify),
-       MMUMETHOD(mmu_clear_reference,  moea_clear_reference),
        MMUMETHOD(mmu_copy_page,        moea_copy_page),
        MMUMETHOD(mmu_copy_pages,       moea_copy_pages),
        MMUMETHOD(mmu_enter,            moea_enter),
@@ -1353,17 +1351,6 @@ moea_is_prefaultable(mmu_t mmu, pmap_t p
 }
 
 void
-moea_clear_reference(mmu_t mmu, vm_page_t m)
-{
-
-       KASSERT((m->oflags & VPO_UNMANAGED) == 0,
-           ("moea_clear_reference: page %p is not managed", m));
-       rw_wlock(&pvh_global_lock);
-       moea_clear_bit(m, PTE_REF);
-       rw_wunlock(&pvh_global_lock);
-}
-
-void
 moea_clear_modify(mmu_t mmu, vm_page_t m)
 {
 

Modified: head/sys/powerpc/aim/mmu_oea64.c
==============================================================================
--- head/sys/powerpc/aim/mmu_oea64.c    Fri Sep 20 01:55:37 2013        
(r255723)
+++ head/sys/powerpc/aim/mmu_oea64.c    Fri Sep 20 04:30:18 2013        
(r255724)
@@ -288,7 +288,6 @@ static void         moea64_syncicache(mmu_t, pm
  */
 void moea64_change_wiring(mmu_t, pmap_t, vm_offset_t, boolean_t);
 void moea64_clear_modify(mmu_t, vm_page_t);
-void moea64_clear_reference(mmu_t, vm_page_t);
 void moea64_copy_page(mmu_t, vm_page_t, vm_page_t);
 void moea64_copy_pages(mmu_t mmu, vm_page_t *ma, vm_offset_t a_offset,
     vm_page_t *mb, vm_offset_t b_offset, int xfersize);
@@ -334,7 +333,6 @@ static void moea64_sync_icache(mmu_t, pm
 static mmu_method_t moea64_methods[] = {
        MMUMETHOD(mmu_change_wiring,    moea64_change_wiring),
        MMUMETHOD(mmu_clear_modify,     moea64_clear_modify),
-       MMUMETHOD(mmu_clear_reference,  moea64_clear_reference),
        MMUMETHOD(mmu_copy_page,        moea64_copy_page),
        MMUMETHOD(mmu_copy_pages,       moea64_copy_pages),
        MMUMETHOD(mmu_enter,            moea64_enter),
@@ -1543,15 +1541,6 @@ moea64_is_prefaultable(mmu_t mmu, pmap_t
 }
 
 void
-moea64_clear_reference(mmu_t mmu, vm_page_t m)
-{
-
-       KASSERT((m->oflags & VPO_UNMANAGED) == 0,
-           ("moea64_clear_reference: page %p is not managed", m));
-       moea64_clear_bit(mmu, m, LPTE_REF);
-}
-
-void
 moea64_clear_modify(mmu_t mmu, vm_page_t m)
 {
 

Modified: head/sys/powerpc/booke/pmap.c
==============================================================================
--- head/sys/powerpc/booke/pmap.c       Fri Sep 20 01:55:37 2013        
(r255723)
+++ head/sys/powerpc/booke/pmap.c       Fri Sep 20 04:30:18 2013        
(r255724)
@@ -270,7 +270,6 @@ void pmap_bootstrap_ap(volatile uint32_t
  */
 static void            mmu_booke_change_wiring(mmu_t, pmap_t, vm_offset_t, 
boolean_t);
 static void            mmu_booke_clear_modify(mmu_t, vm_page_t);
-static void            mmu_booke_clear_reference(mmu_t, vm_page_t);
 static void            mmu_booke_copy(mmu_t, pmap_t, pmap_t, vm_offset_t,
     vm_size_t, vm_offset_t);
 static void            mmu_booke_copy_page(mmu_t, vm_page_t, vm_page_t);
@@ -333,7 +332,6 @@ static mmu_method_t mmu_booke_methods[] 
        /* pmap dispatcher interface */
        MMUMETHOD(mmu_change_wiring,    mmu_booke_change_wiring),
        MMUMETHOD(mmu_clear_modify,     mmu_booke_clear_modify),
-       MMUMETHOD(mmu_clear_reference,  mmu_booke_clear_reference),
        MMUMETHOD(mmu_copy,             mmu_booke_copy),
        MMUMETHOD(mmu_copy_page,        mmu_booke_copy_page),
        MMUMETHOD(mmu_copy_pages,       mmu_booke_copy_pages),
@@ -2357,38 +2355,6 @@ mmu_booke_ts_referenced(mmu_t mmu, vm_pa
 }
 
 /*
- * Clear the reference bit on the specified physical page.
- */
-static void
-mmu_booke_clear_reference(mmu_t mmu, vm_page_t m)
-{
-       pte_t *pte;
-       pv_entry_t pv;
-
-       KASSERT((m->oflags & VPO_UNMANAGED) == 0,
-           ("mmu_booke_clear_reference: page %p is not managed", m));
-       rw_wlock(&pvh_global_lock);
-       TAILQ_FOREACH(pv, &m->md.pv_list, pv_link) {
-               PMAP_LOCK(pv->pv_pmap);
-               if ((pte = pte_find(mmu, pv->pv_pmap, pv->pv_va)) != NULL &&
-                   PTE_ISVALID(pte)) {
-                       if (PTE_ISREFERENCED(pte)) {
-                               mtx_lock_spin(&tlbivax_mutex);
-                               tlb_miss_lock();
-                               
-                               tlb0_flush_entry(pv->pv_va);
-                               pte->flags &= ~PTE_REFERENCED;
-
-                               tlb_miss_unlock();
-                               mtx_unlock_spin(&tlbivax_mutex);
-                       }
-               }
-               PMAP_UNLOCK(pv->pv_pmap);
-       }
-       rw_wunlock(&pvh_global_lock);
-}
-
-/*
  * Change wiring attribute for a map/virtual-address pair.
  */
 static void

Modified: head/sys/powerpc/powerpc/pmap_dispatch.c
==============================================================================
--- head/sys/powerpc/powerpc/pmap_dispatch.c    Fri Sep 20 01:55:37 2013        
(r255723)
+++ head/sys/powerpc/powerpc/pmap_dispatch.c    Fri Sep 20 04:30:18 2013        
(r255724)
@@ -116,14 +116,6 @@ pmap_clear_modify(vm_page_t m)
 }
 
 void
-pmap_clear_reference(vm_page_t m)
-{
-
-       CTR2(KTR_PMAP, "%s(%p)", __func__, m);
-       MMU_CLEAR_REFERENCE(mmu_obj, m);
-}
-
-void
 pmap_copy(pmap_t dst_pmap, pmap_t src_pmap, vm_offset_t dst_addr,
     vm_size_t len, vm_offset_t src_addr)
 {

Modified: head/sys/sparc64/sparc64/pmap.c
==============================================================================
--- head/sys/sparc64/sparc64/pmap.c     Fri Sep 20 01:55:37 2013        
(r255723)
+++ head/sys/sparc64/sparc64/pmap.c     Fri Sep 20 04:30:18 2013        
(r255724)
@@ -2165,25 +2165,6 @@ pmap_clear_modify(vm_page_t m)
 }
 
 void
-pmap_clear_reference(vm_page_t m)
-{
-       struct tte *tp;
-       u_long data;
-
-       KASSERT((m->oflags & VPO_UNMANAGED) == 0,
-           ("pmap_clear_reference: page %p is not managed", m));
-       rw_wlock(&tte_list_global_lock);
-       TAILQ_FOREACH(tp, &m->md.tte_list, tte_link) {
-               if ((tp->tte_data & TD_PV) == 0)
-                       continue;
-               data = atomic_clear_long(&tp->tte_data, TD_REF);
-               if ((data & TD_REF) != 0)
-                       tlb_page_demap(TTE_GET_PMAP(tp), TTE_GET_VA(tp));
-       }
-       rw_wunlock(&tte_list_global_lock);
-}
-
-void
 pmap_remove_write(vm_page_t m)
 {
        struct tte *tp;

Modified: head/sys/vm/pmap.h
==============================================================================
--- head/sys/vm/pmap.h  Fri Sep 20 01:55:37 2013        (r255723)
+++ head/sys/vm/pmap.h  Fri Sep 20 04:30:18 2013        (r255724)
@@ -104,7 +104,6 @@ void                 pmap_align_superpage(vm_object_t,
                    vm_size_t);
 void            pmap_change_wiring(pmap_t, vm_offset_t, boolean_t);
 void            pmap_clear_modify(vm_page_t m);
-void            pmap_clear_reference(vm_page_t m);
 void            pmap_copy(pmap_t, pmap_t, vm_offset_t, vm_size_t, vm_offset_t);
 void            pmap_copy_page(vm_page_t, vm_page_t);
 void            pmap_copy_pages(vm_page_t ma[], vm_offset_t a_offset,
_______________________________________________
[email protected] mailing list
http://lists.freebsd.org/mailman/listinfo/svn-src-head
To unsubscribe, send any mail to "[email protected]"

Reply via email to