summaryrefslogtreecommitdiffstats
path: root/sys/amd64
diff options
context:
space:
mode:
authoralc <alc@FreeBSD.org>2004-07-31 06:42:05 +0000
committeralc <alc@FreeBSD.org>2004-07-31 06:42:05 +0000
commitadd997e1ff5d16931a09517184d3a2c6f41ea0fc (patch)
tree904f6cc912edb97ed2cf9b26ef416384b6a389c7 /sys/amd64
parent3a9d887f934cc0de3b4bff024c9458e15f120b02 (diff)
downloadFreeBSD-src-add997e1ff5d16931a09517184d3a2c6f41ea0fc.zip
FreeBSD-src-add997e1ff5d16931a09517184d3a2c6f41ea0fc.tar.gz
Add pmap locking to pmap_object_init_pt().
Diffstat (limited to 'sys/amd64')
-rw-r--r--sys/amd64/amd64/pmap.c7
1 files changed, 6 insertions, 1 deletions
diff --git a/sys/amd64/amd64/pmap.c b/sys/amd64/amd64/pmap.c
index e9e67eb..b8c6a9d 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);
}
}
OpenPOWER on IntegriCloud