git: ce3f5e979d42 - main - vm_fault: use iterators in dontneed()
- Go to: [ bottom of page ] [ top of archives ] [ this month ]
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;