diff options
Diffstat (limited to 'sys/vm/vm_fault.c')
-rw-r--r-- | sys/vm/vm_fault.c | 10 |
1 files changed, 2 insertions, 8 deletions
diff --git a/sys/vm/vm_fault.c b/sys/vm/vm_fault.c index 4bd82f4..6fac17c 100644 --- a/sys/vm/vm_fault.c +++ b/sys/vm/vm_fault.c @@ -973,23 +973,17 @@ vm_fault_prefault(pmap_t pmap, vm_offset_t addra, vm_map_entry_t entry) VM_OBJECT_UNLOCK(lobject); break; } - vm_page_lock_queues(); if (((m->valid & VM_PAGE_BITS_ALL) == VM_PAGE_BITS_ALL) && (m->busy == 0) && (m->flags & (PG_BUSY | PG_FICTITIOUS)) == 0) { if ((m->queue - m->pc) == PQ_CACHE) { + vm_page_lock_queues(); vm_page_deactivate(m); + vm_page_unlock_queues(); } - vm_page_busy(m); - vm_page_unlock_queues(); - VM_OBJECT_UNLOCK(lobject); mpte = pmap_enter_quick(pmap, addr, m, mpte); - VM_OBJECT_LOCK(lobject); - vm_page_lock_queues(); - vm_page_wakeup(m); } - vm_page_unlock_queues(); VM_OBJECT_UNLOCK(lobject); } } |