Skip site navigation (1)Skip section navigation (2)
Date:      Mon, 8 Apr 2013 21:51:30 +0000 (UTC)
From:      Attilio Rao <attilio@FreeBSD.org>
To:        src-committers@freebsd.org, svn-src-user@freebsd.org
Subject:   svn commit: r249285 - in user/attilio/vmobj-readlock/sys: powerpc/aim powerpc/booke sparc64/sparc64 vm
Message-ID:  <201304082151.r38LpU32036343@svn.freebsd.org>

next in thread | raw e-mail | index | archive | help
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);
 	}
 }
 



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201304082151.r38LpU32036343>