Author: alc
Date: Sun May 30 20:31:12 2010
New Revision: 208659
URL: http://svn.freebsd.org/changeset/base/208659

Log:
  Simplify the inner loop of get_pv_entry(): While iterating over the page's
  pv list, there is no point in checking whether or not the pv list is empty,
  wait instead until the loop completes.

Modified:
  head/sys/ia64/ia64/pmap.c
  head/sys/mips/mips/pmap.c
  head/sys/sun4v/sun4v/pmap.c

Modified: head/sys/ia64/ia64/pmap.c
==============================================================================
--- head/sys/ia64/ia64/pmap.c   Sun May 30 19:34:20 2010        (r208658)
+++ head/sys/ia64/ia64/pmap.c   Sun May 30 20:31:12 2010        (r208659)
@@ -800,8 +800,6 @@ retry:
                        TAILQ_REMOVE(&pmap->pm_pvlist, pv, pv_plist);
                        m->md.pv_list_count--;
                        TAILQ_REMOVE(&m->md.pv_list, pv, pv_list);
-                       if (TAILQ_EMPTY(&m->md.pv_list))
-                               vm_page_flag_clear(m, PG_WRITEABLE);
                        if (pmap != locked_pmap)
                                PMAP_UNLOCK(pmap);
                        if (allocated_pv == NULL)
@@ -809,6 +807,8 @@ retry:
                        else
                                free_pv_entry(pv);
                }
+               if (TAILQ_EMPTY(&m->md.pv_list))
+                       vm_page_flag_clear(m, PG_WRITEABLE);
        }
        if (allocated_pv == NULL) {
                if (vpq == &vm_page_queues[PQ_INACTIVE]) {

Modified: head/sys/mips/mips/pmap.c
==============================================================================
--- head/sys/mips/mips/pmap.c   Sun May 30 19:34:20 2010        (r208658)
+++ head/sys/mips/mips/pmap.c   Sun May 30 20:31:12 2010        (r208659)
@@ -1342,10 +1342,6 @@ retry:
                        TAILQ_REMOVE(&pmap->pm_pvlist, pv, pv_plist);
                        m->md.pv_list_count--;
                        TAILQ_REMOVE(&m->md.pv_list, pv, pv_list);
-                       if (TAILQ_EMPTY(&m->md.pv_list)) {
-                               vm_page_flag_clear(m, PG_WRITEABLE);
-                               m->md.pv_flags &= ~(PV_TABLE_REF | 
PV_TABLE_MOD);
-                       }
                        pmap_unuse_pt(pmap, va, pv->pv_ptem);
                        if (pmap != locked_pmap)
                                PMAP_UNLOCK(pmap);
@@ -1354,6 +1350,10 @@ retry:
                        else
                                free_pv_entry(pv);
                }
+               if (TAILQ_EMPTY(&m->md.pv_list)) {
+                       vm_page_flag_clear(m, PG_WRITEABLE);
+                       m->md.pv_flags &= ~(PV_TABLE_REF | PV_TABLE_MOD);
+               }
        }
        if (allocated_pv == NULL) {
                if (vpq == &vm_page_queues[PQ_INACTIVE]) {

Modified: head/sys/sun4v/sun4v/pmap.c
==============================================================================
--- head/sys/sun4v/sun4v/pmap.c Sun May 30 19:34:20 2010        (r208658)
+++ head/sys/sun4v/sun4v/pmap.c Sun May 30 20:31:12 2010        (r208659)
@@ -341,8 +341,6 @@ retry:
                        pmap_invalidate_page(pmap, va, TRUE);
                        TAILQ_REMOVE(&pmap->pm_pvlist, pv, pv_plist);
                        TAILQ_REMOVE(&m->md.pv_list, pv, pv_list);
-                       if (TAILQ_EMPTY(&m->md.pv_list))
-                               vm_page_flag_clear(m, PG_WRITEABLE);
                        m->md.pv_list_count--;
 
                        if (pmap != locked_pmap)
@@ -352,6 +350,8 @@ retry:
                        else
                                free_pv_entry(pv);
                }
+               if (TAILQ_EMPTY(&m->md.pv_list))
+                       vm_page_flag_clear(m, PG_WRITEABLE);
        }
        if (allocated_pv == NULL) {
                if (vpq == &vm_page_queues[PQ_INACTIVE]) {
_______________________________________________
svn-src-all@freebsd.org mailing list
http://lists.freebsd.org/mailman/listinfo/svn-src-all
To unsubscribe, send any mail to "svn-src-all-unsubscr...@freebsd.org"

Reply via email to