git: ce3f5e979d42 - main - vm_fault: use iterators in dontneed()

From: Doug Moore <dougm_at_FreeBSD.org>
Date: Sat, 26 Apr 2025 18:12:04 UTC
The branch main has been updated by dougm:

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

commit ce3f5e979d42deb9268774c9660d5599e4349c15
Author:     Doug Moore <dougm@FreeBSD.org>
AuthorDate: 2025-04-26 18:08:01 +0000
Commit:     Doug Moore <dougm@FreeBSD.org>
CommitDate: 2025-04-26 18:08:01 +0000

    vm_fault: use iterators in dontneed()
    
    Use iterators instead of tailq pointers in vm_fault_dontneed().
    
    Reviewed by:    alc
    Differential Revision:  https://reviews.freebsd.org/D50012
---
 sys/vm/vm_fault.c | 17 ++++++++---------
 1 file changed, 8 insertions(+), 9 deletions(-)

diff --git a/sys/vm/vm_fault.c b/sys/vm/vm_fault.c
index 8531dc9d5196..36e6e7d50513 100644
--- a/sys/vm/vm_fault.c
+++ b/sys/vm/vm_fault.c
@@ -1853,11 +1853,11 @@ found:
 static void
 vm_fault_dontneed(const struct faultstate *fs, vm_offset_t vaddr, int ahead)
 {
+	struct pctrie_iter pages;
 	vm_map_entry_t entry;
 	vm_object_t first_object;
 	vm_offset_t end, start;
-	vm_page_t m, m_next;
-	vm_pindex_t pend, pstart;
+	vm_page_t m;
 	vm_size_t size;
 
 	VM_OBJECT_ASSERT_UNLOCKED(fs->object);
@@ -1876,13 +1876,12 @@ vm_fault_dontneed(const struct faultstate *fs, vm_offset_t vaddr, int ahead)
 			else
 				start = end - size;
 			pmap_advise(fs->map->pmap, start, end, MADV_DONTNEED);
-			pstart = OFF_TO_IDX(entry->offset) + atop(start -
-			    entry->start);
-			m_next = vm_page_find_least(first_object, pstart);
-			pend = OFF_TO_IDX(entry->offset) + atop(end -
-			    entry->start);
-			while ((m = m_next) != NULL && m->pindex < pend) {
-				m_next = TAILQ_NEXT(m, listq);
+			vm_page_iter_limit_init(&pages, first_object,
+			    OFF_TO_IDX(entry->offset) +
+			    atop(end - entry->start));
+			VM_RADIX_FOREACH_FROM(m, &pages,
+			    OFF_TO_IDX(entry->offset) +
+			    atop(start - entry->start)) {
 				if (!vm_page_all_valid(m) ||
 				    vm_page_busied(m))
 					continue;