svn commit: r189698 - head/sys/amd64/amd64
Alan Cox
alc at FreeBSD.org
Wed Mar 11 07:55:07 PDT 2009
Author: alc
Date: Wed Mar 11 14:55:04 2009
New Revision: 189698
URL: http://svn.freebsd.org/changeset/base/189698
Log:
Optimize the inner loop of pmap_copy().
MFC after: 6 weeks
Modified:
head/sys/amd64/amd64/pmap.c
Modified: head/sys/amd64/amd64/pmap.c
==============================================================================
--- head/sys/amd64/amd64/pmap.c Wed Mar 11 14:39:55 2009 (r189697)
+++ head/sys/amd64/amd64/pmap.c Wed Mar 11 14:55:04 2009 (r189698)
@@ -3538,6 +3538,7 @@ pmap_copy(pmap_t dst_pmap, pmap_t src_pm
src_pte = (pt_entry_t *)PHYS_TO_DMAP(srcptepaddr);
src_pte = &src_pte[pmap_pte_index(addr)];
+ dstmpte = NULL;
while (addr < va_next) {
pt_entry_t ptetemp;
ptetemp = *src_pte;
@@ -3545,9 +3546,11 @@ pmap_copy(pmap_t dst_pmap, pmap_t src_pm
* we only virtual copy managed pages
*/
if ((ptetemp & PG_MANAGED) != 0) {
- dstmpte = pmap_allocpte(dst_pmap, addr,
- M_NOWAIT);
- if (dstmpte == NULL)
+ if (dstmpte != NULL &&
+ dstmpte->pindex == pmap_pde_pindex(addr))
+ dstmpte->wire_count++;
+ else if ((dstmpte = pmap_allocpte(dst_pmap,
+ addr, M_NOWAIT)) == NULL)
break;
dst_pte = (pt_entry_t *)
PHYS_TO_DMAP(VM_PAGE_TO_PHYS(dstmpte));
More information about the svn-src-all
mailing list