From 5c8460ba2e20852ad03e95edc6ed72e57382adb1 Mon Sep 17 00:00:00 2001 From: alc Date: Sun, 30 May 2010 20:31:12 +0000 Subject: 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. --- sys/ia64/ia64/pmap.c | 4 ++-- sys/mips/mips/pmap.c | 8 ++++---- sys/sun4v/sun4v/pmap.c | 4 ++-- 3 files changed, 8 insertions(+), 8 deletions(-) (limited to 'sys') diff --git a/sys/ia64/ia64/pmap.c b/sys/ia64/ia64/pmap.c index beb538e..373d019 100644 --- a/sys/ia64/ia64/pmap.c +++ b/sys/ia64/ia64/pmap.c @@ -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]) { diff --git a/sys/mips/mips/pmap.c b/sys/mips/mips/pmap.c index 86ef25d..842b6b9 100644 --- a/sys/mips/mips/pmap.c +++ b/sys/mips/mips/pmap.c @@ -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]) { diff --git a/sys/sun4v/sun4v/pmap.c b/sys/sun4v/sun4v/pmap.c index 9a7949c..8044048 100644 --- a/sys/sun4v/sun4v/pmap.c +++ b/sys/sun4v/sun4v/pmap.c @@ -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]) { -- cgit v1.1