git: 0b694568b0b5 - main - vm_object: use iterators in madvise()
- Go to: [ bottom of page ] [ top of archives ] [ this month ]
Date: Sun, 20 Apr 2025 19:36:20 UTC
The branch main has been updated by dougm: URL: https://cgit.FreeBSD.org/src/commit/?id=0b694568b0b5d3cf76f56b119b3a378a47b44a1f commit 0b694568b0b5d3cf76f56b119b3a378a47b44a1f Author: Doug Moore <dougm@FreeBSD.org> AuthorDate: 2025-04-20 19:35:12 +0000 Commit: Doug Moore <dougm@FreeBSD.org> CommitDate: 2025-04-20 19:35:12 +0000 vm_object: use iterators in madvise() Change vm_object_madvise() to use iterators rather than tailq pointers. Reviewed by: kib Differential Revision: https://reviews.freebsd.org/D49932 --- sys/vm/vm_object.c | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/sys/vm/vm_object.c b/sys/vm/vm_object.c index a1cd01d9fec6..2f2f77ff075c 100644 --- a/sys/vm/vm_object.c +++ b/sys/vm/vm_object.c @@ -1332,6 +1332,7 @@ void vm_object_madvise(vm_object_t object, vm_pindex_t pindex, vm_pindex_t end, int advice) { + struct pctrie_iter pages; vm_pindex_t tpindex; vm_object_t backing_object, tobject; vm_page_t m, tm; @@ -1339,13 +1340,15 @@ vm_object_madvise(vm_object_t object, vm_pindex_t pindex, vm_pindex_t end, if (object == NULL) return; + vm_page_iter_init(&pages, object); relookup: VM_OBJECT_WLOCK(object); if (!vm_object_advice_applies(object, advice)) { VM_OBJECT_WUNLOCK(object); return; } - for (m = vm_page_find_least(object, pindex); pindex < end; pindex++) { + for (m = vm_radix_iter_lookup_ge(&pages, pindex); pindex < end; + pindex++) { tobject = object; /* @@ -1394,7 +1397,7 @@ relookup: } else { next_page: tm = m; - m = TAILQ_NEXT(m, listq); + m = vm_radix_iter_step(&pages); } /* @@ -1420,6 +1423,7 @@ next_page: } if (!vm_page_busy_sleep(tm, "madvpo", 0)) VM_OBJECT_WUNLOCK(tobject); + pctrie_iter_reset(&pages); goto relookup; } vm_page_advise(tm, advice);