git: 2be18f348e60 - main - vm_object: use iterators in unwire()

From: Doug Moore <dougm_at_FreeBSD.org>
Date: Thu, 24 Apr 2025 19:07:22 UTC
The branch main has been updated by dougm:

URL: https://cgit.FreeBSD.org/src/commit/?id=2be18f348e60c9fce7d1cf4a1c275ce89a03579c

commit 2be18f348e60c9fce7d1cf4a1c275ce89a03579c
Author:     Doug Moore <dougm@FreeBSD.org>
AuthorDate: 2025-04-24 19:06:19 +0000
Commit:     Doug Moore <dougm@FreeBSD.org>
CommitDate: 2025-04-24 19:06:19 +0000

    vm_object: use iterators in unwire()
    
    Use iterators in place of tailq pointers in vm_object_unwire().
    
    Reviewed by:    kib
    Differential Revision:  https://reviews.freebsd.org/D49939
---
 sys/vm/vm_object.c | 7 +++++--
 1 file changed, 5 insertions(+), 2 deletions(-)

diff --git a/sys/vm/vm_object.c b/sys/vm/vm_object.c
index 39f9f0a50d46..147221c1e7e3 100644
--- a/sys/vm/vm_object.c
+++ b/sys/vm/vm_object.c
@@ -2352,6 +2352,7 @@ void
 vm_object_unwire(vm_object_t object, vm_ooffset_t offset, vm_size_t length,
     uint8_t queue)
 {
+	struct pctrie_iter pages;
 	vm_object_t tobject, t1object;
 	vm_page_t m, tm;
 	vm_pindex_t end_pindex, pindex, tpindex;
@@ -2366,10 +2367,11 @@ vm_object_unwire(vm_object_t object, vm_ooffset_t offset, vm_size_t length,
 		return;
 	pindex = OFF_TO_IDX(offset);
 	end_pindex = pindex + atop(length);
+	vm_page_iter_init(&pages, object);
 again:
 	locked_depth = 1;
 	VM_OBJECT_RLOCK(object);
-	m = vm_page_find_least(object, pindex);
+	m = vm_radix_iter_lookup_ge(&pages, pindex);
 	while (pindex < end_pindex) {
 		if (m == NULL || pindex < m->pindex) {
 			/*
@@ -2397,7 +2399,7 @@ again:
 			    NULL);
 		} else {
 			tm = m;
-			m = TAILQ_NEXT(m, listq);
+			m = vm_radix_iter_step(&pages);
 		}
 		if (vm_page_trysbusy(tm) == 0) {
 			for (tobject = object; locked_depth >= 1;
@@ -2411,6 +2413,7 @@ again:
 			if (!vm_page_busy_sleep(tm, "unwbo",
 			    VM_ALLOC_IGN_SBUSY))
 				VM_OBJECT_RUNLOCK(tobject);
+			pctrie_iter_reset(&pages);
 			goto again;
 		}
 		vm_page_unwire(tm, queue);