summaryrefslogtreecommitdiffstats
path: root/sys/alpha
diff options
context:
space:
mode:
authoralc <alc@FreeBSD.org>2004-07-21 03:38:46 +0000
committeralc <alc@FreeBSD.org>2004-07-21 03:38:46 +0000
commita1da1e9157198d9a90d15cc90ee5e98f6bdd83ea (patch)
treef29aec409db999c9fac0f89d23c5a50f22dbb72a /sys/alpha
parentd38e57366f061b96514560c3de73c414ae3b494d (diff)
downloadFreeBSD-src-a1da1e9157198d9a90d15cc90ee5e98f6bdd83ea.zip
FreeBSD-src-a1da1e9157198d9a90d15cc90ee5e98f6bdd83ea.tar.gz
Add some additional pmap locking and lock assertions.
Diffstat (limited to 'sys/alpha')
-rw-r--r--sys/alpha/alpha/pmap.c5
1 files changed, 5 insertions, 0 deletions
diff --git a/sys/alpha/alpha/pmap.c b/sys/alpha/alpha/pmap.c
index 96a1115..140103a 100644
--- a/sys/alpha/alpha/pmap.c
+++ b/sys/alpha/alpha/pmap.c
@@ -1359,6 +1359,8 @@ pmap_remove_entry(pmap_t pmap, vm_page_t m, vm_offset_t va)
pv_entry_t pv;
int rtval;
+ PMAP_LOCK_ASSERT(pmap, MA_OWNED);
+ mtx_assert(&vm_page_queue_mtx, MA_OWNED);
if (m->md.pv_list_count < pmap->pm_stats.resident_count) {
TAILQ_FOREACH(pv, &m->md.pv_list, pv_list) {
if (pmap == pv->pv_pmap && va == pv->pv_va)
@@ -1416,6 +1418,7 @@ pmap_remove_pte(pmap_t pmap, pt_entry_t *ptq, vm_offset_t va)
pt_entry_t oldpte;
vm_page_t m;
+ PMAP_LOCK_ASSERT(pmap, MA_OWNED);
oldpte = *ptq;
*ptq = 0;
if (oldpte & PG_W)
@@ -1760,7 +1763,9 @@ pmap_enter(pmap_t pmap, vm_offset_t va, vm_page_t m, vm_prot_t prot,
if (opa) {
int err;
vm_page_lock_queues();
+ PMAP_LOCK(pmap);
err = pmap_remove_pte(pmap, pte, va);
+ PMAP_UNLOCK(pmap);
vm_page_unlock_queues();
if (err)
panic("pmap_enter: pte vanished, va: 0x%lx", va);
OpenPOWER on IntegriCloud