svn commit: r249285 - in user/attilio/vmobj-readlock/sys: powerpc/aim powerpc/booke sparc64/sparc64 vm
Attilio Rao
attilio at FreeBSD.org
Mon Apr 8 21:51:31 UTC 2013
Author: attilio
Date: Mon Apr 8 21:51:30 2013
New Revision: 249285
URL: http://svnweb.freebsd.org/changeset/base/249285
Log:
Make vm_fault_prefault() acquire only read locks for vm_object.
Sponsored by: EMC / Isilon storage division
Submitted by: alc
Modified:
user/attilio/vmobj-readlock/sys/powerpc/aim/mmu_oea.c
user/attilio/vmobj-readlock/sys/powerpc/aim/mmu_oea64.c
user/attilio/vmobj-readlock/sys/powerpc/booke/pmap.c
user/attilio/vmobj-readlock/sys/sparc64/sparc64/pmap.c
user/attilio/vmobj-readlock/sys/vm/vm_fault.c
Modified: user/attilio/vmobj-readlock/sys/powerpc/aim/mmu_oea.c
==============================================================================
--- user/attilio/vmobj-readlock/sys/powerpc/aim/mmu_oea.c Mon Apr 8 21:15:43 2013 (r249284)
+++ user/attilio/vmobj-readlock/sys/powerpc/aim/mmu_oea.c Mon Apr 8 21:51:30 2013 (r249285)
@@ -1149,7 +1149,7 @@ moea_enter_locked(pmap_t pmap, vm_offset
rw_assert(&pvh_global_lock, RA_WLOCKED);
PMAP_LOCK_ASSERT(pmap, MA_OWNED);
if ((m->oflags & (VPO_UNMANAGED | VPO_BUSY)) == 0)
- VM_OBJECT_ASSERT_WLOCKED(m->object);
+ VM_OBJECT_ASSERT_LOCKED(m->object);
/* XXX change the pvo head for fake pages */
if ((m->oflags & VPO_UNMANAGED) != 0) {
Modified: user/attilio/vmobj-readlock/sys/powerpc/aim/mmu_oea64.c
==============================================================================
--- user/attilio/vmobj-readlock/sys/powerpc/aim/mmu_oea64.c Mon Apr 8 21:15:43 2013 (r249284)
+++ user/attilio/vmobj-readlock/sys/powerpc/aim/mmu_oea64.c Mon Apr 8 21:51:30 2013 (r249285)
@@ -1261,7 +1261,7 @@ moea64_enter(mmu_t mmu, pmap_t pmap, vm_
}
if ((m->oflags & (VPO_UNMANAGED | VPO_BUSY)) == 0)
- VM_OBJECT_ASSERT_WLOCKED(m->object);
+ VM_OBJECT_ASSERT_LOCKED(m->object);
/* XXX change the pvo head for fake pages */
if ((m->oflags & VPO_UNMANAGED) != 0) {
Modified: user/attilio/vmobj-readlock/sys/powerpc/booke/pmap.c
==============================================================================
--- user/attilio/vmobj-readlock/sys/powerpc/booke/pmap.c Mon Apr 8 21:15:43 2013 (r249284)
+++ user/attilio/vmobj-readlock/sys/powerpc/booke/pmap.c Mon Apr 8 21:51:30 2013 (r249285)
@@ -1564,7 +1564,7 @@ mmu_booke_enter_locked(mmu_t mmu, pmap_t
("mmu_booke_enter_locked: user pmap, non user va"));
}
if ((m->oflags & (VPO_UNMANAGED | VPO_BUSY)) == 0)
- VM_OBJECT_ASSERT_WLOCKED(m->object);
+ VM_OBJECT_ASSERT_LOCKED(m->object);
PMAP_LOCK_ASSERT(pmap, MA_OWNED);
Modified: user/attilio/vmobj-readlock/sys/sparc64/sparc64/pmap.c
==============================================================================
--- user/attilio/vmobj-readlock/sys/sparc64/sparc64/pmap.c Mon Apr 8 21:15:43 2013 (r249284)
+++ user/attilio/vmobj-readlock/sys/sparc64/sparc64/pmap.c Mon Apr 8 21:51:30 2013 (r249285)
@@ -1495,7 +1495,7 @@ pmap_enter_locked(pmap_t pm, vm_offset_t
rw_assert(&tte_list_global_lock, RA_WLOCKED);
PMAP_LOCK_ASSERT(pm, MA_OWNED);
if ((m->oflags & (VPO_UNMANAGED | VPO_BUSY)) == 0)
- VM_OBJECT_ASSERT_WLOCKED(m->object);
+ VM_OBJECT_ASSERT_LOCKED(m->object);
PMAP_STATS_INC(pmap_nenter);
pa = VM_PAGE_TO_PHYS(m);
Modified: user/attilio/vmobj-readlock/sys/vm/vm_fault.c
==============================================================================
--- user/attilio/vmobj-readlock/sys/vm/vm_fault.c Mon Apr 8 21:15:43 2013 (r249284)
+++ user/attilio/vmobj-readlock/sys/vm/vm_fault.c Mon Apr 8 21:51:30 2013 (r249285)
@@ -1046,28 +1046,28 @@ vm_fault_prefault(pmap_t pmap, vm_offset
pindex = ((addr - entry->start) + entry->offset) >> PAGE_SHIFT;
lobject = object;
- VM_OBJECT_WLOCK(lobject);
+ VM_OBJECT_RLOCK(lobject);
while ((m = vm_page_lookup(lobject, pindex)) == NULL &&
lobject->type == OBJT_DEFAULT &&
(backing_object = lobject->backing_object) != NULL) {
KASSERT((lobject->backing_object_offset & PAGE_MASK) ==
0, ("vm_fault_prefault: unaligned object offset"));
pindex += lobject->backing_object_offset >> PAGE_SHIFT;
- VM_OBJECT_WLOCK(backing_object);
- VM_OBJECT_WUNLOCK(lobject);
+ VM_OBJECT_RLOCK(backing_object);
+ VM_OBJECT_RUNLOCK(lobject);
lobject = backing_object;
}
/*
* give-up when a page is not in memory
*/
if (m == NULL) {
- VM_OBJECT_WUNLOCK(lobject);
+ VM_OBJECT_RUNLOCK(lobject);
break;
}
if (m->valid == VM_PAGE_BITS_ALL &&
(m->flags & PG_FICTITIOUS) == 0)
pmap_enter_quick(pmap, addr, m, entry->protection);
- VM_OBJECT_WUNLOCK(lobject);
+ VM_OBJECT_RUNLOCK(lobject);
}
}
More information about the svn-src-user
mailing list