Add pmap locking to pmap_object_init_pt().

This commit is contained in:
Alan Cox 2004-07-31 06:42:05 +00:00
parent 70cd856a0c
commit c6bf9f0455
2 changed files with 12 additions and 2 deletions

View File

@ -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);
}
}

View File

@ -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);
}
}