From 97f3a1565d88b2d9f01ac571e016184935dd6a08 Mon Sep 17 00:00:00 2001 From: Doug Moore Date: Sat, 19 Apr 2025 17:31:29 -0500 Subject: [PATCH] linuxkpi: use iterator in zap_vma_ptes Change zap_vma_ptes() to use iterators, rather than TAILQ pointers. Reviewed by: kib Differential Revision: https://reviews.freebsd.org/D49918 --- sys/compat/linuxkpi/common/src/linux_compat.c | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/sys/compat/linuxkpi/common/src/linux_compat.c b/sys/compat/linuxkpi/common/src/linux_compat.c index 30acd1b54e9..e061504868f 100644 --- a/sys/compat/linuxkpi/common/src/linux_compat.c +++ b/sys/compat/linuxkpi/common/src/linux_compat.c @@ -59,6 +59,7 @@ #include #include #include +#include #include @@ -647,6 +648,7 @@ int zap_vma_ptes(struct vm_area_struct *vma, unsigned long address, unsigned long size) { + struct pctrie_iter pages; vm_object_t obj; vm_page_t m; @@ -654,9 +656,8 @@ zap_vma_ptes(struct vm_area_struct *vma, unsigned long address, if (obj == NULL || (obj->flags & OBJ_UNMANAGED) != 0) return (-ENOTSUP); VM_OBJECT_RLOCK(obj); - for (m = vm_page_find_least(obj, OFF_TO_IDX(address)); - m != NULL && m->pindex < OFF_TO_IDX(address + size); - m = TAILQ_NEXT(m, listq)) + vm_page_iter_limit_init(&pages, obj, OFF_TO_IDX(address + size)); + VM_RADIX_FOREACH_FROM(m, &pages, OFF_TO_IDX(address)) pmap_remove_all(m); VM_OBJECT_RUNLOCK(obj); return (0);