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