svn commit: r208659 - in head/sys: ia64/ia64 mips/mips sun4v/sun4v
Alan Cox
alc at FreeBSD.org
Sun May 30 20:31:13 UTC 2010
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]) {
More information about the svn-src-head
mailing list