svn commit: r204856 - user/kmacy/head_page_lock/sys/amd64/amd64
Kip Macy
kmacy at FreeBSD.org
Mon Mar 8 05:16:20 UTC 2010
Author: kmacy
Date: Mon Mar 8 05:16:20 2010
New Revision: 204856
URL: http://svn.freebsd.org/changeset/base/204856
Log:
- streamline pmap_remove_page using pa_retrylock
- remove gratuitous unlock from pmap_remove_pages
Modified:
user/kmacy/head_page_lock/sys/amd64/amd64/pmap.c
Modified: user/kmacy/head_page_lock/sys/amd64/amd64/pmap.c
==============================================================================
--- user/kmacy/head_page_lock/sys/amd64/amd64/pmap.c Mon Mar 8 05:03:24 2010 (r204855)
+++ user/kmacy/head_page_lock/sys/amd64/amd64/pmap.c Mon Mar 8 05:16:20 2010 (r204856)
@@ -2719,7 +2719,7 @@ static void
pmap_remove_page(pmap_t pmap, vm_offset_t va, pd_entry_t *pde, vm_page_t *free)
{
pt_entry_t *pte;
- vm_page_t m = NULL;
+ vm_paddr_t pa = 0;
PMAP_LOCK_ASSERT(pmap, MA_OWNED);
if ((*pde & PG_V) == 0)
@@ -2727,17 +2727,12 @@ pmap_remove_page(pmap_t pmap, vm_offset_
pte = pmap_pde_to_pte(pde, va);
if ((*pte & PG_V) == 0)
return;
- if (*pte & PG_MANAGED) {
- m = PHYS_TO_VM_PAGE(*pte & PG_FRAME);
- if (vm_page_trylock(m) == 0) {
- PMAP_UNLOCK(pmap);
- vm_page_lock(m);
- PMAP_LOCK(pmap);
- }
- }
+ if (*pte & PG_MANAGED)
+ (void)pa_tryrelock(pmap, *pte & PG_FRAME, &pa);
+
pmap_remove_pte(pmap, pte, va, *pde, free);
- if (m != NULL)
- vm_page_unlock(m);
+ if (pa)
+ PA_UNLOCK(pa);
pmap_invalidate_page(pmap, va);
}
@@ -2959,10 +2954,6 @@ restart:
anyvalid = 1;
ret = pmap_remove_pte(pmap, pte, sva, ptpaddr, &free);
- if (pa) {
- PA_UNLOCK(pa);
- pa = 0;
- }
if (ret)
break;
}
More information about the svn-src-user
mailing list