diff options
author | alc <alc@FreeBSD.org> | 2004-07-17 23:44:59 +0000 |
---|---|---|
committer | alc <alc@FreeBSD.org> | 2004-07-17 23:44:59 +0000 |
commit | 8dfcfd72537a07371009d4f587486b414275ad0b (patch) | |
tree | 0e617f9d97e619dcdf295e1b6cc40e2cb5362add /sys/i386 | |
parent | d73042a02483766675bad491e210186901aa9e60 (diff) | |
download | FreeBSD-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/i386')
-rw-r--r-- | sys/i386/i386/pmap.c | 3 |
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); } |