svn commit: r250855 - in user/attilio/vmobj-readlock/sys: amd64/amd64 arm/arm i386/i386 i386/xen ia64/ia64 mips/mips powerpc/aim powerpc/booke sparc64/sparc64

Attilio Rao attilio at FreeBSD.org
Tue May 21 13:02:40 UTC 2013


Author: attilio
Date: Tue May 21 13:02:37 2013
New Revision: 250855
URL: http://svnweb.freebsd.org/changeset/base/250855

Log:
  o Take into account the possibility of busy pages.
  o Remove the asserts on the dest page.  There could be some legittimate
    reasons that have the dst page out of whatever race for the time being.
  
  Sponsored by:	EMC / Isilon storage division

Modified:
  user/attilio/vmobj-readlock/sys/amd64/amd64/pmap.c
  user/attilio/vmobj-readlock/sys/arm/arm/pmap-v6.c
  user/attilio/vmobj-readlock/sys/arm/arm/pmap.c
  user/attilio/vmobj-readlock/sys/i386/i386/pmap.c
  user/attilio/vmobj-readlock/sys/i386/xen/pmap.c
  user/attilio/vmobj-readlock/sys/ia64/ia64/pmap.c
  user/attilio/vmobj-readlock/sys/mips/mips/pmap.c
  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

Modified: user/attilio/vmobj-readlock/sys/amd64/amd64/pmap.c
==============================================================================
--- user/attilio/vmobj-readlock/sys/amd64/amd64/pmap.c	Tue May 21 11:41:08 2013	(r250854)
+++ user/attilio/vmobj-readlock/sys/amd64/amd64/pmap.c	Tue May 21 13:02:37 2013	(r250855)
@@ -4231,8 +4231,8 @@ pmap_copy_page(vm_page_t msrc, vm_page_t
 {
 	vm_offset_t dst, src;
 
-	VM_OBJECT_ASSERT_LOCKED(msrc->object);
-	VM_OBJECT_ASSERT_LOCKED(mdst->object);
+	if ((msrc->oflags & VPO_BUSY) == 0)
+		VM_OBJECT_ASSERT_LOCKED(msrc->object);
 
 	src = PHYS_TO_DMAP(VM_PAGE_TO_PHYS(msrc));
 	dst = PHYS_TO_DMAP(VM_PAGE_TO_PHYS(mdst));

Modified: user/attilio/vmobj-readlock/sys/arm/arm/pmap-v6.c
==============================================================================
--- user/attilio/vmobj-readlock/sys/arm/arm/pmap-v6.c	Tue May 21 11:41:08 2013	(r250854)
+++ user/attilio/vmobj-readlock/sys/arm/arm/pmap-v6.c	Tue May 21 13:02:37 2013	(r250855)
@@ -3729,8 +3729,8 @@ void
 pmap_copy_page(vm_page_t src, vm_page_t dst)
 {
 
-	VM_OBJECT_ASSERT_LOCKED(src->object);
-	VM_OBJECT_ASSERT_LOCKED(dst->object);
+	if ((src->oflags & VPO_BUSY) == 0)
+		VM_OBJECT_ASSERT_LOCKED(src->object);
 
 	if (_arm_memcpy && PAGE_SIZE >= _min_memcpy_size &&
 	    _arm_memcpy((void *)VM_PAGE_TO_PHYS(dst),

Modified: user/attilio/vmobj-readlock/sys/arm/arm/pmap.c
==============================================================================
--- user/attilio/vmobj-readlock/sys/arm/arm/pmap.c	Tue May 21 11:41:08 2013	(r250854)
+++ user/attilio/vmobj-readlock/sys/arm/arm/pmap.c	Tue May 21 13:02:37 2013	(r250855)
@@ -4411,8 +4411,8 @@ pmap_copy_page(vm_page_t src, vm_page_t 
 	vm_offset_t srcpg, dstpg;
 #endif
 
-	VM_OBJECT_ASSERT_LOCKED(src->object);
-	VM_OBJECT_ASSERT_LOCKED(dst->object);
+	if ((src->oflags & VPO_BUSY) == 0)
+		VM_OBJECT_ASSERT_LOCKED(src->object);
 
 	cpu_dcache_wbinv_all();
 	cpu_l2cache_wbinv_all();

Modified: user/attilio/vmobj-readlock/sys/i386/i386/pmap.c
==============================================================================
--- user/attilio/vmobj-readlock/sys/i386/i386/pmap.c	Tue May 21 11:41:08 2013	(r250854)
+++ user/attilio/vmobj-readlock/sys/i386/i386/pmap.c	Tue May 21 13:02:37 2013	(r250855)
@@ -4185,8 +4185,8 @@ pmap_copy_page(vm_page_t src, vm_page_t 
 {
 	struct sysmaps *sysmaps;
 
-	VM_OBJECT_ASSERT_LOCKED(src->object);
-	VM_OBJECT_ASSERT_LOCKED(dst->object);
+	if ((src->oflags & VPO_BUSY) == 0)
+		VM_OBJECT_ASSERT_LOCKED(src->object);
 
 	sysmaps = &sysmaps_pcpu[PCPU_GET(cpuid)];
 	mtx_lock(&sysmaps->lock);

Modified: user/attilio/vmobj-readlock/sys/i386/xen/pmap.c
==============================================================================
--- user/attilio/vmobj-readlock/sys/i386/xen/pmap.c	Tue May 21 11:41:08 2013	(r250854)
+++ user/attilio/vmobj-readlock/sys/i386/xen/pmap.c	Tue May 21 13:02:37 2013	(r250855)
@@ -3432,8 +3432,8 @@ pmap_copy_page(vm_page_t src, vm_page_t 
 {
 	struct sysmaps *sysmaps;
 
-	VM_OBJECT_ASSERT_LOCKED(src->object);
-	VM_OBJECT_ASSERT_LOCKED(dst->object);
+	if ((src->oflags & VPO_BUSY) == 0)
+		VM_OBJECT_ASSERT_LOCKED(src->object);
 
 	sysmaps = &sysmaps_pcpu[PCPU_GET(cpuid)];
 	mtx_lock(&sysmaps->lock);

Modified: user/attilio/vmobj-readlock/sys/ia64/ia64/pmap.c
==============================================================================
--- user/attilio/vmobj-readlock/sys/ia64/ia64/pmap.c	Tue May 21 11:41:08 2013	(r250854)
+++ user/attilio/vmobj-readlock/sys/ia64/ia64/pmap.c	Tue May 21 13:02:37 2013	(r250855)
@@ -2009,8 +2009,8 @@ pmap_copy_page(vm_page_t msrc, vm_page_t
 {
 	void *dst, *src;
 
-	VM_OBJECT_ASSERT_LOCKED(msrc->object);
-	VM_OBJECT_ASSERT_LOCKED(mdst->object);
+	if ((msrc->oflags & VPO_BUSY) == 0)
+		VM_OBJECT_ASSERT_LOCKED(msrc->object);
 
 	src = (void *)pmap_page_to_va(msrc);
 	dst = (void *)pmap_page_to_va(mdst);

Modified: user/attilio/vmobj-readlock/sys/mips/mips/pmap.c
==============================================================================
--- user/attilio/vmobj-readlock/sys/mips/mips/pmap.c	Tue May 21 11:41:08 2013	(r250854)
+++ user/attilio/vmobj-readlock/sys/mips/mips/pmap.c	Tue May 21 13:02:37 2013	(r250855)
@@ -2553,8 +2553,8 @@ pmap_copy_page(vm_page_t src, vm_page_t 
 	vm_offset_t va_src, va_dst;
 	vm_paddr_t phys_dst, phys_src;
 
-	VM_OBJECT_ASSERT_LOCKED(src->object);
-	VM_OBJECT_ASSERT_LOCKED(dst->object);
+	if ((src->oflags & VPO_BUSY) == 0)
+		VM_OBJECT_ASSERT_LOCKED(src->object);
 
 	phys_src = VM_PAGE_TO_PHYS(src);
 	phys_dst = VM_PAGE_TO_PHYS(dst);

Modified: user/attilio/vmobj-readlock/sys/powerpc/aim/mmu_oea.c
==============================================================================
--- user/attilio/vmobj-readlock/sys/powerpc/aim/mmu_oea.c	Tue May 21 11:41:08 2013	(r250854)
+++ user/attilio/vmobj-readlock/sys/powerpc/aim/mmu_oea.c	Tue May 21 13:02:37 2013	(r250855)
@@ -1050,8 +1050,8 @@ moea_copy_page(mmu_t mmu, vm_page_t msrc
 	vm_offset_t	dst;
 	vm_offset_t	src;
 
-	VM_OBJECT_ASSERT_LOCKED(msrc->object);
-	VM_OBJECT_ASSERT_LOCKED(mdst->object);
+	if ((msrc->oflags & VPO_BUSY) == 0)
+		VM_OBJECT_ASSERT_LOCKED(msrc->object);
 
 	dst = VM_PAGE_TO_PHYS(mdst);
 	src = VM_PAGE_TO_PHYS(msrc);

Modified: user/attilio/vmobj-readlock/sys/powerpc/aim/mmu_oea64.c
==============================================================================
--- user/attilio/vmobj-readlock/sys/powerpc/aim/mmu_oea64.c	Tue May 21 11:41:08 2013	(r250854)
+++ user/attilio/vmobj-readlock/sys/powerpc/aim/mmu_oea64.c	Tue May 21 13:02:37 2013	(r250855)
@@ -1097,8 +1097,8 @@ moea64_copy_page(mmu_t mmu, vm_page_t ms
 	vm_offset_t	dst;
 	vm_offset_t	src;
 
-	VM_OBJECT_ASSERT_LOCKED(msrc->object);
-	VM_OBJECT_ASSERT_LOCKED(mdst->object);
+	if ((msrc->oflags & VPO_BUSY) == 0)
+		VM_OBJECT_ASSERT_LOCKED(msrc->object);
 
 	dst = VM_PAGE_TO_PHYS(mdst);
 	src = VM_PAGE_TO_PHYS(msrc);

Modified: user/attilio/vmobj-readlock/sys/powerpc/booke/pmap.c
==============================================================================
--- user/attilio/vmobj-readlock/sys/powerpc/booke/pmap.c	Tue May 21 11:41:08 2013	(r250854)
+++ user/attilio/vmobj-readlock/sys/powerpc/booke/pmap.c	Tue May 21 13:02:37 2013	(r250855)
@@ -2127,8 +2127,8 @@ mmu_booke_copy_page(mmu_t mmu, vm_page_t
 {
 	vm_offset_t sva, dva;
 
-	VM_OBJECT_ASSERT_LOCKED(sm->object);
-	VM_OBJECT_ASSERT_LOCKED(dm->object);
+	if ((ms->oflags & VPO_BUSY) == 0)
+		VM_OBJECT_ASSERT_LOCKED(ms->object);
 
 	sva = copy_page_src_va;
 	dva = copy_page_dst_va;

Modified: user/attilio/vmobj-readlock/sys/sparc64/sparc64/pmap.c
==============================================================================
--- user/attilio/vmobj-readlock/sys/sparc64/sparc64/pmap.c	Tue May 21 11:41:08 2013	(r250854)
+++ user/attilio/vmobj-readlock/sys/sparc64/sparc64/pmap.c	Tue May 21 13:02:37 2013	(r250855)
@@ -1843,8 +1843,8 @@ pmap_copy_page(vm_page_t msrc, vm_page_t
 	vm_paddr_t psrc;
 	struct tte *tp;
 
-	VM_OBJECT_ASSERT_LOCKED(msrc->object);
-	VM_OBJECT_ASSERT_LOCKED(mdst->object);
+	if ((msrc->oflags & VPO_BUSY) == 0)
+		VM_OBJECT_ASSERT_LOCKED(msrc->object);
 	KASSERT((mdst->flags & PG_FICTITIOUS) == 0,
 	    ("pmap_copy_page: fake dst page"));
 	KASSERT((msrc->flags & PG_FICTITIOUS) == 0,


More information about the svn-src-user mailing list