From 4a309ab44ca83894657a720c7f19478ff37d25c0 Mon Sep 17 00:00:00 2001 From: Alan Cox Date: Sat, 28 Jun 2003 21:21:04 +0000 Subject: [PATCH] MFi386 Add vm object locking to pmap_object_init_pt(). --- sys/alpha/alpha/pmap.c | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/sys/alpha/alpha/pmap.c b/sys/alpha/alpha/pmap.c index c14e42d16617..d4166a3ff995 100644 --- a/sys/alpha/alpha/pmap.c +++ b/sys/alpha/alpha/pmap.c @@ -2090,18 +2090,18 @@ pmap_object_init_pt(pmap_t pmap, vm_offset_t addr, if (pmap == NULL || object == NULL) return; - + VM_OBJECT_LOCK(object); psize = alpha_btop(size); if ((object->type != OBJT_VNODE) || ((limit & MAP_PREFAULT_PARTIAL) && (psize > MAX_INIT_PT) && (object->resident_page_count > MAX_INIT_PT))) { - return; + goto unlock_return; } if (psize + pindex > object->size) { if (object->size < pindex) - return; + goto unlock_return; psize = object->size - pindex; } @@ -2141,8 +2141,10 @@ pmap_object_init_pt(pmap_t pmap, vm_offset_t addr, vm_page_deactivate(p); vm_page_busy(p); vm_page_unlock_queues(); + VM_OBJECT_UNLOCK(object); mpte = pmap_enter_quick(pmap, addr + alpha_ptob(tmpidx), p, mpte); + VM_OBJECT_LOCK(object); vm_page_lock_queues(); vm_page_wakeup(p); } @@ -2173,15 +2175,18 @@ pmap_object_init_pt(pmap_t pmap, vm_offset_t addr, vm_page_deactivate(p); vm_page_busy(p); vm_page_unlock_queues(); + VM_OBJECT_UNLOCK(object); mpte = pmap_enter_quick(pmap, addr + alpha_ptob(tmpidx), p, mpte); + VM_OBJECT_LOCK(object); vm_page_lock_queues(); vm_page_wakeup(p); } vm_page_unlock_queues(); } } - return; +unlock_return: + VM_OBJECT_UNLOCK(object); } /*