From c6bf9f04555dde1e7bf0c3413ebf5cbb67fe88fc Mon Sep 17 00:00:00 2001 From: Alan Cox Date: Sat, 31 Jul 2004 06:42:05 +0000 Subject: [PATCH] Add pmap locking to pmap_object_init_pt(). --- sys/amd64/amd64/pmap.c | 7 ++++++- sys/i386/i386/pmap.c | 7 ++++++- 2 files changed, 12 insertions(+), 2 deletions(-) diff --git a/sys/amd64/amd64/pmap.c b/sys/amd64/amd64/pmap.c index e9e67ebe58b..b8c6a9dcbd7 100644 --- a/sys/amd64/amd64/pmap.c +++ b/sys/amd64/amd64/pmap.c @@ -2158,9 +2158,11 @@ pmap_object_init_pt(pmap_t pmap, vm_offset_t addr, int npdes; pd_entry_t ptepa, *pde; + PMAP_LOCK(pmap); pde = pmap_pde(pmap, addr); if (pde != 0 && (*pde & PG_V) != 0) - return; + goto out; + PMAP_UNLOCK(pmap); retry: p = vm_page_lookup(object, pindex); if (p != NULL) { @@ -2192,6 +2194,7 @@ retry: p->valid = VM_PAGE_BITS_ALL; + PMAP_LOCK(pmap); pmap->pm_stats.resident_count += size >> PAGE_SHIFT; npdes = size >> PDRSHIFT; for(i = 0; i < npdes; i++) { @@ -2200,6 +2203,8 @@ retry: pde++; } pmap_invalidate_all(pmap); +out: + PMAP_UNLOCK(pmap); } } diff --git a/sys/i386/i386/pmap.c b/sys/i386/i386/pmap.c index b767c3f4b17..69fdae9926c 100644 --- a/sys/i386/i386/pmap.c +++ b/sys/i386/i386/pmap.c @@ -2210,8 +2210,10 @@ pmap_object_init_pt(pmap_t pmap, vm_offset_t addr, int npdes; pd_entry_t ptepa; + PMAP_LOCK(pmap); if (pmap->pm_pdir[ptepindex = (addr >> PDRSHIFT)]) - return; + goto out; + PMAP_UNLOCK(pmap); retry: p = vm_page_lookup(object, pindex); if (p != NULL) { @@ -2243,6 +2245,7 @@ retry: p->valid = VM_PAGE_BITS_ALL; + PMAP_LOCK(pmap); pmap->pm_stats.resident_count += size >> PAGE_SHIFT; npdes = size >> PDRSHIFT; for(i = 0; i < npdes; i++) { @@ -2252,6 +2255,8 @@ retry: ptepindex += 1; } pmap_invalidate_all(pmap); +out: + PMAP_UNLOCK(pmap); } }