diff --git a/sys/x86/iommu/amd_idpgtbl.c b/sys/x86/iommu/amd_idpgtbl.c --- a/sys/x86/iommu/amd_idpgtbl.c +++ b/sys/x86/iommu/amd_idpgtbl.c @@ -54,6 +54,7 @@ #include #include #include +#include #include #include #include @@ -103,6 +104,7 @@ void amdiommu_domain_free_pgtbl(struct amdiommu_domain *domain) { + struct pctrie_iter pages; vm_object_t obj; vm_page_t m; @@ -118,7 +120,8 @@ /* Obliterate ref_counts */ VM_OBJECT_ASSERT_WLOCKED(obj); - for (m = vm_page_lookup(obj, 0); m != NULL; m = vm_page_next(m)) + vm_page_iter_init(&pages, obj); + VM_RADIX_FORALL(m, &pages) vm_page_clearref(m); VM_OBJECT_WUNLOCK(obj); vm_object_deallocate(obj);