Date: Mon, 11 Jun 2012 21:41:17 +0000 (UTC) From: Alan Cox <alc@FreeBSD.org> To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r236930 - head/sys/amd64/amd64 Message-ID: <201206112141.q5BLfHao011969@svn.freebsd.org>
next in thread | raw e-mail | index | archive | help
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))
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201206112141.q5BLfHao011969>