diff options
author | Hans Petter Selasky <hselasky@FreeBSD.org> | 2019-09-12 16:26:59 +0000 |
---|---|---|
committer | Hans Petter Selasky <hselasky@FreeBSD.org> | 2019-09-12 16:26:59 +0000 |
commit | 11b57401e63962b792cff6f90744fa3471430dff (patch) | |
tree | c9c570a6b1caa193efdcff0905ac6701b874e5ba /sys | |
parent | 40617291e14612f20e9ed2173eff67c4c5c36dfe (diff) | |
download | src-11b57401e63962b792cff6f90744fa3471430dff.tar.gz src-11b57401e63962b792cff6f90744fa3471430dff.zip |
Use REFCOUNT_COUNT() to obtain refcount where appropriate.
Refcount waiting will set some flag bits in the refcount value.
Make sure these bits get cleared by using the REFCOUNT_COUNT()
macro to obtain the actual refcount.
Differential Revision: https://reviews.freebsd.org/D21620
Reviewed by: kib@, markj@
MFC after: 1 week
Sponsored by: Mellanox Technologies
Notes
Notes:
svn path=/head/; revision=352253
Diffstat (limited to 'sys')
-rw-r--r-- | sys/kern/vfs_bio.c | 5 | ||||
-rw-r--r-- | sys/vm/vm_fault.c | 5 | ||||
-rw-r--r-- | sys/vm/vm_object.c | 18 | ||||
-rw-r--r-- | sys/vm/vm_swapout.c | 3 |
4 files changed, 17 insertions, 14 deletions
diff --git a/sys/kern/vfs_bio.c b/sys/kern/vfs_bio.c index 22801b5fe1a8..940b27665600 100644 --- a/sys/kern/vfs_bio.c +++ b/sys/kern/vfs_bio.c @@ -67,6 +67,7 @@ __FBSDID("$FreeBSD$"); #include <sys/kthread.h> #include <sys/proc.h> #include <sys/racct.h> +#include <sys/refcount.h> #include <sys/resourcevar.h> #include <sys/rwlock.h> #include <sys/smp.h> @@ -2842,9 +2843,9 @@ vfs_vmio_iodone(struct buf *bp) bool bogus; obj = bp->b_bufobj->bo_object; - KASSERT(obj->paging_in_progress >= bp->b_npages, + KASSERT(REFCOUNT_COUNT(obj->paging_in_progress) >= bp->b_npages, ("vfs_vmio_iodone: paging in progress(%d) < b_npages(%d)", - obj->paging_in_progress, bp->b_npages)); + REFCOUNT_COUNT(obj->paging_in_progress), bp->b_npages)); vp = bp->b_vp; KASSERT(vp->v_holdcnt > 0, diff --git a/sys/vm/vm_fault.c b/sys/vm/vm_fault.c index 35742af74bde..f3557bbde5ac 100644 --- a/sys/vm/vm_fault.c +++ b/sys/vm/vm_fault.c @@ -87,6 +87,7 @@ __FBSDID("$FreeBSD$"); #include <sys/mutex.h> #include <sys/proc.h> #include <sys/racct.h> +#include <sys/refcount.h> #include <sys/resourcevar.h> #include <sys/rwlock.h> #include <sys/sysctl.h> @@ -339,7 +340,7 @@ vm_fault_restore_map_lock(struct faultstate *fs) { VM_OBJECT_ASSERT_WLOCKED(fs->first_object); - MPASS(fs->first_object->paging_in_progress > 0); + MPASS(REFCOUNT_COUNT(fs->first_object->paging_in_progress) > 0); if (!vm_map_trylock_read(fs->map)) { VM_OBJECT_WUNLOCK(fs->first_object); @@ -394,7 +395,7 @@ vm_fault_populate(struct faultstate *fs, vm_prot_t prot, int fault_type, MPASS(fs->object == fs->first_object); VM_OBJECT_ASSERT_WLOCKED(fs->first_object); - MPASS(fs->first_object->paging_in_progress > 0); + MPASS(REFCOUNT_COUNT(fs->first_object->paging_in_progress) > 0); MPASS(fs->first_object->backing_object == NULL); MPASS(fs->lookup_still_valid); diff --git a/sys/vm/vm_object.c b/sys/vm/vm_object.c index b65a74d136c6..a2f6cb7c1f22 100644 --- a/sys/vm/vm_object.c +++ b/sys/vm/vm_object.c @@ -195,9 +195,9 @@ vm_object_zdtor(void *mem, int size, void *arg) ("object %p has reservations", object)); #endif - KASSERT(object->paging_in_progress == 0, + KASSERT(REFCOUNT_COUNT(object->paging_in_progress) == 0, ("object %p paging_in_progress = %d", - object, object->paging_in_progress)); + object, REFCOUNT_COUNT(object->paging_in_progress))); KASSERT(object->resident_page_count == 0, ("object %p resident_page_count = %d", object, object->resident_page_count)); @@ -395,7 +395,7 @@ vm_object_pip_wait(vm_object_t object, char *waitid) VM_OBJECT_ASSERT_WLOCKED(object); - while (object->paging_in_progress) { + while (REFCOUNT_COUNT(object->paging_in_progress) > 0) { VM_OBJECT_WUNLOCK(object); refcount_wait(&object->paging_in_progress, waitid, PVM); VM_OBJECT_WLOCK(object); @@ -408,7 +408,7 @@ vm_object_pip_wait_unlocked(vm_object_t object, char *waitid) VM_OBJECT_ASSERT_UNLOCKED(object); - while (object->paging_in_progress) + while (REFCOUNT_COUNT(object->paging_in_progress) > 0) refcount_wait(&object->paging_in_progress, waitid, PVM); } @@ -577,7 +577,7 @@ vm_object_deallocate(vm_object_t object) robject->ref_count++; retry: - if (robject->paging_in_progress) { + if (REFCOUNT_COUNT(robject->paging_in_progress) > 0) { VM_OBJECT_WUNLOCK(object); vm_object_pip_wait(robject, "objde1"); @@ -586,7 +586,7 @@ retry: VM_OBJECT_WLOCK(object); goto retry; } - } else if (object->paging_in_progress) { + } else if (REFCOUNT_COUNT(object->paging_in_progress) > 0) { VM_OBJECT_WUNLOCK(robject); VM_OBJECT_WUNLOCK(object); refcount_wait( @@ -729,7 +729,7 @@ vm_object_terminate(vm_object_t object) */ vm_object_pip_wait(object, "objtrm"); - KASSERT(!object->paging_in_progress, + KASSERT(!REFCOUNT_COUNT(object->paging_in_progress), ("vm_object_terminate: pageout in progress")); KASSERT(object->ref_count == 0, @@ -1660,8 +1660,8 @@ vm_object_collapse(vm_object_t object) break; } - if (object->paging_in_progress != 0 || - backing_object->paging_in_progress != 0) { + if (REFCOUNT_COUNT(object->paging_in_progress) > 0 || + REFCOUNT_COUNT(backing_object->paging_in_progress) > 0) { vm_object_qcollapse(object); VM_OBJECT_WUNLOCK(backing_object); break; diff --git a/sys/vm/vm_swapout.c b/sys/vm/vm_swapout.c index 2557dc6f4e55..d71c3d07a0d9 100644 --- a/sys/vm/vm_swapout.c +++ b/sys/vm/vm_swapout.c @@ -90,6 +90,7 @@ __FBSDID("$FreeBSD$"); #include <sys/mount.h> #include <sys/racct.h> #include <sys/resourcevar.h> +#include <sys/refcount.h> #include <sys/sched.h> #include <sys/sdt.h> #include <sys/signalvar.h> @@ -193,7 +194,7 @@ vm_swapout_object_deactivate_pages(pmap_t pmap, vm_object_t first_object, goto unlock_return; VM_OBJECT_ASSERT_LOCKED(object); if ((object->flags & OBJ_UNMANAGED) != 0 || - object->paging_in_progress != 0) + REFCOUNT_COUNT(object->paging_in_progress) > 0) goto unlock_return; remove_mode = 0; |