Index: sys/kern/kern_kcov.c =================================================================== --- sys/kern/kern_kcov.c +++ sys/kern/kern_kcov.c @@ -396,20 +396,19 @@ static void kcov_free(struct kcov_info *info) { + struct pctrie_iter pages; vm_page_t m; - size_t i; if (info->kvaddr != 0) { pmap_qremove(info->kvaddr, info->bufsize / PAGE_SIZE); kva_free(info->kvaddr, info->bufsize); } if (info->bufobj != NULL) { + vm_page_iter_limit_init(&pages, info->bufobj, + info->bufsize / PAGE_SIZE); VM_OBJECT_WLOCK(info->bufobj); - m = vm_page_lookup(info->bufobj, 0); - for (i = 0; i < info->bufsize / PAGE_SIZE; i++) { + VM_RADIX_FORALL(m, &pages) vm_page_unwire_noq(m); - m = vm_page_next(m); - } VM_OBJECT_WUNLOCK(info->bufobj); vm_object_deallocate(info->bufobj); } Index: sys/vm/vm_radix.h =================================================================== --- sys/vm/vm_radix.h +++ sys/vm/vm_radix.h @@ -261,8 +261,8 @@ * Iterate over each non-NULL page from page 'start' to the end of the object. */ #define VM_RADIX_FOREACH_FROM(m, pages, start) \ - for (m = vm_radix_iter_lookup_ge(&pages, start); m != NULL; \ - m = vm_radix_iter_step(&pages)) + for (m = vm_radix_iter_lookup_ge(pages, start); m != NULL; \ + m = vm_radix_iter_step(pages)) /* * Iterate over each non-NULL page from the beginning to the end of the object. @@ -312,8 +312,8 @@ * page. */ #define VM_RADIX_FORALL_FROM(m, pages, start) \ - for (m = vm_radix_iter_lookup(&pages, start); m != NULL; \ - m = vm_radix_iter_next(&pages)) + for (m = vm_radix_iter_lookup(pages, start); m != NULL; \ + m = vm_radix_iter_next(pages)) /* * Iterate over consecutive non-NULL pages from the beginning to first NULL