summaryrefslogtreecommitdiffstats
path: root/sys
diff options
context:
space:
mode:
authoralc <alc@FreeBSD.org>2004-07-17 23:44:59 +0000
committeralc <alc@FreeBSD.org>2004-07-17 23:44:59 +0000
commit8dfcfd72537a07371009d4f587486b414275ad0b (patch)
tree0e617f9d97e619dcdf295e1b6cc40e2cb5362add /sys
parentd73042a02483766675bad491e210186901aa9e60 (diff)
downloadFreeBSD-src-8dfcfd72537a07371009d4f587486b414275ad0b.zip
FreeBSD-src-8dfcfd72537a07371009d4f587486b414275ad0b.tar.gz
Remedy my omission of one change in the prevision revision: pmap_remove()
must pin the current thread in order to call pmap_pte_quick().
Diffstat (limited to 'sys')
-rw-r--r--sys/i386/i386/pmap.c3
1 files changed, 3 insertions, 0 deletions
diff --git a/sys/i386/i386/pmap.c b/sys/i386/i386/pmap.c
index aed779d..bbb4be3 100644
--- a/sys/i386/i386/pmap.c
+++ b/sys/i386/i386/pmap.c
@@ -1610,6 +1610,7 @@ pmap_remove_page(pmap_t pmap, vm_offset_t va)
pt_entry_t *pte;
mtx_assert(&vm_page_queue_mtx, MA_OWNED);
+ KASSERT(curthread->td_pinned > 0, ("curthread not pinned"));
PMAP_LOCK_ASSERT(pmap, MA_OWNED);
if ((pte = pmap_pte_quick(pmap, va)) == NULL || *pte == 0)
return;
@@ -1641,6 +1642,7 @@ pmap_remove(pmap_t pmap, vm_offset_t sva, vm_offset_t eva)
return;
vm_page_lock_queues();
+ sched_pin();
PMAP_LOCK(pmap);
/*
@@ -1707,6 +1709,7 @@ pmap_remove(pmap_t pmap, vm_offset_t sva, vm_offset_t eva)
if (anyvalid)
pmap_invalidate_all(pmap);
out:
+ sched_unpin();
vm_page_unlock_queues();
PMAP_UNLOCK(pmap);
}
OpenPOWER on IntegriCloud