summaryrefslogtreecommitdiffstats
path: root/sys/alpha
diff options
context:
space:
mode:
authoralc <alc@FreeBSD.org>2002-12-28 22:47:45 +0000
committeralc <alc@FreeBSD.org>2002-12-28 22:47:45 +0000
commit50bd207de38448383e80e8d392711ad2cf65a913 (patch)
treebce1635eab38bd6d1b0e0030880b1c6954a39cb9 /sys/alpha
parent54658d00ee6e22e193a9906598384ba1152e0bd9 (diff)
downloadFreeBSD-src-50bd207de38448383e80e8d392711ad2cf65a913.zip
FreeBSD-src-50bd207de38448383e80e8d392711ad2cf65a913.tar.gz
- Use VM_ALLOC_WIRED.
- Hold the page queues lock around calls to vm_page_flag_clear() and vm_page_wakeup().
Diffstat (limited to 'sys/alpha')
-rw-r--r--sys/alpha/alpha/pmap.c12
1 files changed, 7 insertions, 5 deletions
diff --git a/sys/alpha/alpha/pmap.c b/sys/alpha/alpha/pmap.c
index 806f91c..58ceb04 100644
--- a/sys/alpha/alpha/pmap.c
+++ b/sys/alpha/alpha/pmap.c
@@ -1011,9 +1011,11 @@ pmap_new_thread(struct thread *td, int pages)
if (oldpte)
pmap_invalidate_page(kernel_pmap, ks + i * PAGE_SIZE);
+ vm_page_lock_queues();
vm_page_wakeup(m);
vm_page_flag_clear(m, PG_ZERO);
m->valid = VM_PAGE_BITS_ALL;
+ vm_page_unlock_queues();
}
}
@@ -1311,8 +1313,10 @@ pmap_pinit(pmap)
lev1pg = vm_page_grab(pmap->pm_pteobj, NUSERLEV3MAPS + NUSERLEV2MAPS,
VM_ALLOC_NORMAL | VM_ALLOC_RETRY | VM_ALLOC_WIRED);
+ vm_page_lock_queues();
vm_page_flag_clear(lev1pg, PG_BUSY);
lev1pg->valid = VM_PAGE_BITS_ALL;
+ vm_page_unlock_queues();
pmap->pm_lev1 = (pt_entry_t*) ALPHA_PHYS_TO_K0SEG(VM_PAGE_TO_PHYS(lev1pg));
if ((lev1pg->flags & PG_ZERO) == 0)
@@ -1434,15 +1438,11 @@ _pmap_allocpte(pmap, ptepindex)
* Find or fabricate a new pagetable page
*/
m = vm_page_grab(pmap->pm_pteobj, ptepindex,
- VM_ALLOC_ZERO | VM_ALLOC_RETRY);
+ VM_ALLOC_WIRED | VM_ALLOC_ZERO | VM_ALLOC_RETRY);
KASSERT(m->queue == PQ_NONE,
("_pmap_allocpte: %p->queue != PQ_NONE", m));
- if (m->wire_count == 0)
- cnt.v_wire_count++;
- m->wire_count++;
-
/*
* Increment the hold count for the page table page
* (denoting a new mapping.)
@@ -1486,9 +1486,11 @@ _pmap_allocpte(pmap, ptepindex)
if ((m->flags & PG_ZERO) == 0)
bzero((caddr_t) ALPHA_PHYS_TO_K0SEG(ptepa), PAGE_SIZE);
+ vm_page_lock_queues();
m->valid = VM_PAGE_BITS_ALL;
vm_page_flag_clear(m, PG_ZERO);
vm_page_wakeup(m);
+ vm_page_unlock_queues();
return m;
}
OpenPOWER on IntegriCloud