diff options
| author | Mark Johnston <markj@FreeBSD.org> | 2019-06-26 17:37:51 +0000 |
|---|---|---|
| committer | Mark Johnston <markj@FreeBSD.org> | 2019-06-26 17:37:51 +0000 |
| commit | 0fd977b3fa32d54b61554416363faae8a7bfaa2b (patch) | |
| tree | 224a32e71fe89996fe93ab9584f9613473e1b38d /sys | |
| parent | 926c3367c8dd9bf69c81699618ce2a71c6fa7bc3 (diff) | |
Notes
Diffstat (limited to 'sys')
| -rw-r--r-- | sys/amd64/sgx/sgx.c | 2 | ||||
| -rw-r--r-- | sys/dev/drm2/ttm/ttm_bo_vm.c | 2 | ||||
| -rw-r--r-- | sys/vm/device_pager.c | 2 | ||||
| -rw-r--r-- | sys/vm/vm_fault.c | 2 | ||||
| -rw-r--r-- | sys/vm/vm_object.c | 8 | ||||
| -rw-r--r-- | sys/vm/vm_page.c | 15 | ||||
| -rw-r--r-- | sys/vm/vm_page.h | 2 |
7 files changed, 16 insertions, 17 deletions
diff --git a/sys/amd64/sgx/sgx.c b/sys/amd64/sgx/sgx.c index d47d4a3596a50..3d45b60de3ef5 100644 --- a/sys/amd64/sgx/sgx.c +++ b/sys/amd64/sgx/sgx.c @@ -358,7 +358,7 @@ sgx_page_remove(struct sgx_softc *sc, vm_page_t p) uint64_t offs; vm_page_lock(p); - vm_page_remove(p); + (void)vm_page_remove(p); vm_page_unlock(p); dprintf("%s: p->pidx %ld\n", __func__, p->pindex); diff --git a/sys/dev/drm2/ttm/ttm_bo_vm.c b/sys/dev/drm2/ttm/ttm_bo_vm.c index 6f7184857ce6f..43d027fc5cd91 100644 --- a/sys/dev/drm2/ttm/ttm_bo_vm.c +++ b/sys/dev/drm2/ttm/ttm_bo_vm.c @@ -115,7 +115,7 @@ ttm_bo_vm_fault(vm_object_t vm_obj, vm_ooffset_t offset, vm_object_pip_add(vm_obj, 1); if (*mres != NULL) { vm_page_lock(*mres); - vm_page_remove(*mres); + (void)vm_page_remove(*mres); vm_page_unlock(*mres); } retry: diff --git a/sys/vm/device_pager.c b/sys/vm/device_pager.c index c27d60869deff..7dce4778f9513 100644 --- a/sys/vm/device_pager.c +++ b/sys/vm/device_pager.c @@ -236,7 +236,7 @@ cdev_pager_free_page(vm_object_t object, vm_page_t m) KASSERT((m->oflags & VPO_UNMANAGED) == 0, ("unmanaged %p", m)); pmap_remove_all(m); vm_page_lock(m); - vm_page_remove(m); + (void)vm_page_remove(m); vm_page_unlock(m); } else if (object->type == OBJT_DEVICE) dev_pager_free_page(object, m); diff --git a/sys/vm/vm_fault.c b/sys/vm/vm_fault.c index 4268db264d52b..ae0103595ae7d 100644 --- a/sys/vm/vm_fault.c +++ b/sys/vm/vm_fault.c @@ -1144,7 +1144,7 @@ readrest: fs.object == fs.first_object->backing_object) { vm_page_lock(fs.m); vm_page_dequeue(fs.m); - vm_page_remove(fs.m); + (void)vm_page_remove(fs.m); vm_page_unlock(fs.m); vm_page_lock(fs.first_m); vm_page_replace_checked(fs.m, fs.first_object, diff --git a/sys/vm/vm_object.c b/sys/vm/vm_object.c index 9fd90f04b6d97..7c3575e646cf8 100644 --- a/sys/vm/vm_object.c +++ b/sys/vm/vm_object.c @@ -1595,10 +1595,8 @@ vm_object_collapse_scan(vm_object_t object, int op) vm_page_lock(p); KASSERT(!pmap_page_is_mapped(p), ("freeing mapped page %p", p)); - if (!vm_page_wired(p)) + if (vm_page_remove(p)) vm_page_free(p); - else - vm_page_remove(p); vm_page_unlock(p); continue; } @@ -1639,10 +1637,8 @@ vm_object_collapse_scan(vm_object_t object, int op) vm_page_lock(p); KASSERT(!pmap_page_is_mapped(p), ("freeing mapped page %p", p)); - if (!vm_page_wired(p)) + if (vm_page_remove(p)) vm_page_free(p); - else - vm_page_remove(p); vm_page_unlock(p); continue; } diff --git a/sys/vm/vm_page.c b/sys/vm/vm_page.c index a90961ce57b55..e43817b812a0e 100644 --- a/sys/vm/vm_page.c +++ b/sys/vm/vm_page.c @@ -1458,20 +1458,21 @@ vm_page_insert_radixdone(vm_page_t m, vm_object_t object, vm_page_t mpred) * vm_page_remove: * * Removes the specified page from its containing object, but does not - * invalidate any backing storage. + * invalidate any backing storage. Return true if the page may be safely + * freed and false otherwise. * * The object must be locked. The page must be locked if it is managed. */ -void +bool vm_page_remove(vm_page_t m) { vm_object_t object; vm_page_t mrem; + object = m->object; + if ((m->oflags & VPO_UNMANAGED) == 0) vm_page_assert_locked(m); - if ((object = m->object) == NULL) - return; VM_OBJECT_ASSERT_WLOCKED(object); if (vm_page_xbusied(m)) vm_page_xunbusy_maybelocked(m); @@ -1495,6 +1496,7 @@ vm_page_remove(vm_page_t m) vdrop(object->handle); m->object = NULL; + return (!vm_page_wired(m)); } /* @@ -1665,7 +1667,7 @@ vm_page_rename(vm_page_t m, vm_object_t new_object, vm_pindex_t new_pindex) */ m->pindex = opidx; vm_page_lock(m); - vm_page_remove(m); + (void)vm_page_remove(m); /* Return back to the new pindex to complete vm_page_insert(). */ m->pindex = new_pindex; @@ -3436,7 +3438,8 @@ vm_page_free_prep(vm_page_t m) if (vm_page_sbusied(m)) panic("vm_page_free_prep: freeing busy page %p", m); - vm_page_remove(m); + if (m->object != NULL) + (void)vm_page_remove(m); /* * If fictitious remove object association and diff --git a/sys/vm/vm_page.h b/sys/vm/vm_page.h index d1938d2a1bd88..57f9f6e9081ce 100644 --- a/sys/vm/vm_page.h +++ b/sys/vm/vm_page.h @@ -561,7 +561,7 @@ bool vm_page_reclaim_contig(int req, u_long npages, vm_paddr_t low, bool vm_page_reclaim_contig_domain(int domain, int req, u_long npages, vm_paddr_t low, vm_paddr_t high, u_long alignment, vm_paddr_t boundary); void vm_page_reference(vm_page_t m); -void vm_page_remove (vm_page_t); +bool vm_page_remove(vm_page_t); int vm_page_rename (vm_page_t, vm_object_t, vm_pindex_t); vm_page_t vm_page_replace(vm_page_t mnew, vm_object_t object, vm_pindex_t pindex); |
