svn commit: r236930 - head/sys/amd64/amd64
Alan Cox
alc at FreeBSD.org
Mon Jun 11 21:41:17 UTC 2012
Author: alc
Date: Mon Jun 11 21:41:16 2012
New Revision: 236930
URL: http://svn.freebsd.org/changeset/base/236930
Log:
Avoid unnecessary atomic operations for clearing PGA_WRITEABLE in
pmap_remove_pages(). This reduces pmap_remove_pages()'s running time by
4 to 11% in my tests.
MFC after: 1 week
Modified:
head/sys/amd64/amd64/pmap.c
Modified: head/sys/amd64/amd64/pmap.c
==============================================================================
--- head/sys/amd64/amd64/pmap.c Mon Jun 11 21:40:02 2012 (r236929)
+++ head/sys/amd64/amd64/pmap.c Mon Jun 11 21:41:16 2012 (r236930)
@@ -4197,7 +4197,8 @@ pmap_remove_pages(pmap_t pmap)
TAILQ_REMOVE(&pvh->pv_list, pv, pv_list);
if (TAILQ_EMPTY(&pvh->pv_list)) {
for (mt = m; mt < &m[NBPDR / PAGE_SIZE]; mt++)
- if (TAILQ_EMPTY(&mt->md.pv_list))
+ if ((mt->aflags & PGA_WRITEABLE) != 0 &&
+ TAILQ_EMPTY(&mt->md.pv_list))
vm_page_aflag_clear(mt, PGA_WRITEABLE);
}
mpte = pmap_lookup_pt_page(pmap, pv->pv_va);
@@ -4213,7 +4214,8 @@ pmap_remove_pages(pmap_t pmap)
} else {
pmap_resident_count_dec(pmap, 1);
TAILQ_REMOVE(&m->md.pv_list, pv, pv_list);
- if (TAILQ_EMPTY(&m->md.pv_list) &&
+ if ((m->aflags & PGA_WRITEABLE) != 0 &&
+ TAILQ_EMPTY(&m->md.pv_list) &&
(m->flags & PG_FICTITIOUS) == 0) {
pvh = pa_to_pvh(VM_PAGE_TO_PHYS(m));
if (TAILQ_EMPTY(&pvh->pv_list))
More information about the svn-src-all
mailing list