Index: sys/amd64/acpica/acpi_wakeup.c =================================================================== --- sys/amd64/acpica/acpi_wakeup.c +++ sys/amd64/acpica/acpi_wakeup.c @@ -367,7 +367,7 @@ free(*wakeaddr, M_DEVBUF); for (i = 0; i < ACPI_WAKEPT_PAGES; i++) { if (wakept_m[i] != NULL) - vm_page_free(wakept_m[i]); + vm_page_free_noobj(wakept_m[i]); } *wakeaddr = NULL; } Index: sys/amd64/amd64/mp_machdep.c =================================================================== --- sys/amd64/amd64/mp_machdep.c +++ sys/amd64/amd64/mp_machdep.c @@ -453,13 +453,13 @@ kernel_pmap->pm_pmltop[0] = old_pml45; invlpg(0); if (la57) - vm_page_free(m_pml4); - vm_page_free(m_pd[3]); - vm_page_free(m_pd[2]); - vm_page_free(m_pd[1]); - vm_page_free(m_pd[0]); - vm_page_free(m_pdp); - vm_page_free(m_boottramp); + vm_page_free_noobj(m_pml4); + vm_page_free_noobj(m_pd[3]); + vm_page_free_noobj(m_pd[2]); + vm_page_free_noobj(m_pd[1]); + vm_page_free_noobj(m_pd[0]); + vm_page_free_noobj(m_pdp); + vm_page_free_noobj(m_boottramp); /* number of APs actually started */ return (mp_naps); Index: sys/amd64/amd64/pmap.c =================================================================== --- sys/amd64/amd64/pmap.c +++ sys/amd64/amd64/pmap.c @@ -2284,10 +2284,10 @@ */ pte_clear(&v_pml5[pmap_pml5e_index(VM_PAGE_TO_PHYS(m_code))]); invlpg((vm_offset_t)v_code); - vm_page_free(m_code); - vm_page_free(m_pdp); - vm_page_free(m_pd); - vm_page_free(m_pt); + vm_page_free_noobj(m_code); + vm_page_free_noobj(m_pdp); + vm_page_free_noobj(m_pd); + vm_page_free_noobj(m_pt); /* * Recursively map PML5 to itself in order to get PTmap and @@ -4464,7 +4464,7 @@ if (zerofilled) vm_page_free_zero(m); else - vm_page_free(m); + vm_page_free_noobj(m); pmap_pt_page_count_adj(pmap, -1); } @@ -5557,7 +5557,7 @@ m = PHYS_TO_VM_PAGE(DMAP_TO_PHYS((vm_offset_t)pc)); dump_drop_page(m->phys_addr); vm_page_unwire_noq(m); - vm_page_free(m); + vm_page_free_noobj(m); } static void Index: sys/arm/arm/pmap-v6.c =================================================================== --- sys/arm/arm/pmap-v6.c +++ sys/arm/arm/pmap-v6.c @@ -2947,7 +2947,7 @@ m = PHYS_TO_VM_PAGE(pmap_kextract((vm_offset_t)pc)); pmap_qremove((vm_offset_t)pc, 1); vm_page_unwire_noq(m); - vm_page_free(m); + vm_page_free_noobj(m); pmap_pte2list_free(&pv_vafree, (vm_offset_t)pc); } Index: sys/arm/nvidia/drm2/tegra_bo.c =================================================================== --- sys/arm/nvidia/drm2/tegra_bo.c +++ sys/arm/nvidia/drm2/tegra_bo.c @@ -68,7 +68,7 @@ cdev_mgtdev_pager_free_page(&pages, m); m->flags &= ~PG_FICTITIOUS; vm_page_unwire_noq(m); - vm_page_free(m); + vm_page_free_noobj(m); } VM_OBJECT_WUNLOCK(bo->cdev_pager); Index: sys/arm64/arm64/pmap.c =================================================================== --- sys/arm64/arm64/pmap.c +++ sys/arm64/arm64/pmap.c @@ -3442,7 +3442,7 @@ m = PHYS_TO_VM_PAGE(DMAP_TO_PHYS((vm_offset_t)pc)); dump_drop_page(m->phys_addr); vm_page_unwire_noq(m); - vm_page_free(m); + vm_page_free_noobj(m); } static void @@ -5776,7 +5776,7 @@ uwptpg->pindex = pmap_l2_pindex(va); if (pmap_insert_pt_page(pmap, uwptpg, true, false)) { vm_page_unwire_noq(uwptpg); - vm_page_free(uwptpg); + vm_page_free_noobj(uwptpg); pmap_abort_ptp(pmap, va, l2pg); return (KERN_RESOURCE_SHORTAGE); } @@ -5798,7 +5798,7 @@ pmap_resident_count_dec(pmap, 1); uwptpg->ref_count = 1; vm_page_unwire_noq(uwptpg); - vm_page_free(uwptpg); + vm_page_free_noobj(uwptpg); } CTR2(KTR_PMAP, "pmap_enter_l2: failure for va %#lx in pmap %p", Index: sys/arm64/iommu/iommu_pmap.c =================================================================== --- sys/arm64/iommu/iommu_pmap.c +++ sys/arm64/iommu/iommu_pmap.c @@ -841,18 +841,18 @@ vm_page_unwire_noq(m1); vm_page_unwire_noq(m); smmu_pmap_resident_count_dec(pmap, 1); - vm_page_free(m); + vm_page_free_noobj(m); smmu_pmap_clear(&l2[k]); } vm_page_unwire_noq(m0); smmu_pmap_resident_count_dec(pmap, 1); - vm_page_free(m1); + vm_page_free_noobj(m1); smmu_pmap_clear(&l1[j]); } smmu_pmap_resident_count_dec(pmap, 1); - vm_page_free(m0); + vm_page_free_noobj(m0); smmu_pmap_clear(&pmap->sp_l0[i]); } Index: sys/arm64/vmm/vmm_mmu.c =================================================================== --- sys/arm64/vmm/vmm_mmu.c +++ sys/arm64/vmm/vmm_mmu.c @@ -85,7 +85,7 @@ m = PHYS_TO_VM_PAGE(l2e & ~ATTR_MASK); vm_page_unwire_noq(m); - vm_page_free(m); + vm_page_free_noobj(m); } static void @@ -104,7 +104,7 @@ m = PHYS_TO_VM_PAGE(l1e & ~ATTR_MASK); vm_page_unwire_noq(m); - vm_page_free(m); + vm_page_free_noobj(m); } static void @@ -123,7 +123,7 @@ m = PHYS_TO_VM_PAGE(l0e & ~ATTR_MASK); vm_page_unwire_noq(m); - vm_page_free(m); + vm_page_free_noobj(m); } void @@ -141,7 +141,7 @@ m = PHYS_TO_VM_PAGE(l0_paddr); vm_page_unwire_noq(m); - vm_page_free(m); + vm_page_free_noobj(m); mtx_destroy(&vmmpmap_mtx); } Index: sys/compat/linuxkpi/common/src/linux_page.c =================================================================== --- sys/compat/linuxkpi/common/src/linux_page.c +++ sys/compat/linuxkpi/common/src/linux_page.c @@ -166,7 +166,7 @@ vm_page_t pgo = page + x; if (vm_page_unwire_noq(pgo)) - vm_page_free(pgo); + vm_page_free_noobj(pgo); } } else { vm_offset_t vaddr; Index: sys/dev/drm2/ttm/ttm_bo.c =================================================================== --- sys/dev/drm2/ttm/ttm_bo.c +++ sys/dev/drm2/ttm/ttm_bo.c @@ -1470,7 +1470,7 @@ { ttm_mem_unregister_shrink(glob->mem_glob, &glob->shrink); - vm_page_free(glob->dummy_read_page); + vm_page_free_noobj(glob->dummy_read_page); } void ttm_bo_global_release(struct drm_global_reference *ref) @@ -1523,7 +1523,7 @@ return (0); out_no_shrink: - vm_page_free(glob->dummy_read_page); + vm_page_free_noobj(glob->dummy_read_page); out_no_drp: free(glob, M_DRM_GLOBAL); return ret; Index: sys/dev/drm2/ttm/ttm_page_alloc.c =================================================================== --- sys/dev/drm2/ttm/ttm_page_alloc.c +++ sys/dev/drm2/ttm/ttm_page_alloc.c @@ -136,7 +136,7 @@ m->flags &= ~PG_FICTITIOUS; m->oflags |= VPO_UNMANAGED; vm_page_unwire_noq(m); - vm_page_free(m); + vm_page_free_noobj(m); } static vm_memattr_t Index: sys/dev/gve/gve_qpl.c =================================================================== --- sys/dev/gve/gve_qpl.c +++ sys/dev/gve/gve_qpl.c @@ -62,7 +62,7 @@ pmap_qremove((vm_offset_t)qpl->dmas[i].cpu_addr, 1); kva_free((vm_offset_t)qpl->dmas[i].cpu_addr, PAGE_SIZE); } - vm_page_free(qpl->pages[i]); + vm_page_free_noobj(qpl->pages[i]); } priv->num_registered_pages--; @@ -254,6 +254,6 @@ if (__predict_false(vm_page_unwire_noq(page))) { pmap_qremove(va, 1); kva_free(va, PAGE_SIZE); - vm_page_free(page); + vm_page_free_noobj(page); } } Index: sys/dev/ti/if_ti.c =================================================================== --- sys/dev/ti/if_ti.c +++ sys/dev/ti/if_ti.c @@ -1626,7 +1626,7 @@ sf[i] = sf_buf_alloc(frame, SFB_NOWAIT); if (sf[i] == NULL) { vm_page_unwire_noq(frame); - vm_page_free(frame); + vm_page_free_noobj(frame); device_printf(sc->ti_dev, "buffer allocation " "failed -- packet dropped!\n"); printf(" index %d page %d\n", idx, i); Index: sys/dev/virtio/balloon/virtio_balloon.c =================================================================== --- sys/dev/virtio/balloon/virtio_balloon.c +++ sys/dev/virtio/balloon/virtio_balloon.c @@ -466,7 +466,7 @@ vtballoon_free_page(struct vtballoon_softc *sc, vm_page_t m) { - vm_page_free(m); + vm_page_free_noobj(m); sc->vtballoon_current_npages--; } Index: sys/dev/xen/balloon/balloon.c =================================================================== --- sys/dev/xen/balloon/balloon.c +++ sys/dev/xen/balloon/balloon.c @@ -196,7 +196,7 @@ KASSERT(xen_feature(XENFEAT_auto_translated_physmap), ("auto translated physmap but mapping is valid")); - vm_page_free(page); + vm_page_free_noobj(page); } bs.current_pages += nr_pages; Index: sys/dev/xen/gntdev/gntdev.c =================================================================== --- sys/dev/xen/gntdev/gntdev.c +++ sys/dev/xen/gntdev/gntdev.c @@ -276,7 +276,7 @@ gnttab_free_grant_reference(gref->gref_id); } vm_page_unwire_noq(gref->page); - vm_page_free(gref->page); + vm_page_free_noobj(gref->page); gref->page = NULL; } if (gref->page == NULL) { Index: sys/fs/nfsserver/nfs_nfsdport.c =================================================================== --- sys/fs/nfsserver/nfs_nfsdport.c +++ sys/fs/nfsserver/nfs_nfsdport.c @@ -7091,7 +7091,7 @@ for (i = mb->m_epg_npgs - 1; i > bextpg; i--) { pg = PHYS_TO_VM_PAGE(mb->m_epg_pa[i]); vm_page_unwire_noq(pg); - vm_page_free(pg); + vm_page_free_noobj(pg); } mb->m_epg_npgs = bextpg + 1; if (bextpg == 0) Index: sys/fs/nfsserver/nfs_nfsdsubs.c =================================================================== --- sys/fs/nfsserver/nfs_nfsdsubs.c +++ sys/fs/nfsserver/nfs_nfsdsubs.c @@ -1336,7 +1336,7 @@ /* Free page. */ pg = PHYS_TO_VM_PAGE(m->m_epg_pa[pgno]); vm_page_unwire_noq(pg); - vm_page_free(pg); + vm_page_free_noobj(pg); trim -= plen; m->m_epg_npgs--; pgno--; Index: sys/i386/i386/pmap.c =================================================================== --- sys/i386/i386/pmap.c +++ sys/i386/i386/pmap.c @@ -2227,7 +2227,7 @@ ("pmap_release: got wrong ptd page")); #endif vm_page_unwire_noq(m); - vm_page_free(m); + vm_page_free_noobj(m); } } @@ -2482,7 +2482,7 @@ m = PHYS_TO_VM_PAGE(pmap_kextract((vm_offset_t)pc)); pmap_qremove((vm_offset_t)pc, 1); vm_page_unwire_noq(m); - vm_page_free(m); + vm_page_free_noobj(m); pmap_ptelist_free(&pv_vafree, (vm_offset_t)pc); } @@ -4029,7 +4029,7 @@ uwptpg->pindex = va >> PDRSHIFT; if (pmap_insert_pt_page(pmap, uwptpg, true, false)) { vm_page_unwire_noq(uwptpg); - vm_page_free(uwptpg); + vm_page_free_noobj(uwptpg); return (KERN_RESOURCE_SHORTAGE); } pmap->pm_stats.resident_count++; @@ -4048,7 +4048,7 @@ pmap->pm_stats.resident_count--; uwptpg->ref_count = 1; vm_page_unwire_noq(uwptpg); - vm_page_free(uwptpg); + vm_page_free_noobj(uwptpg); } CTR2(KTR_PMAP, "pmap_enter_pde: failure for va %#lx" " in pmap %p", va, pmap); Index: sys/kern/uipc_ktls.c =================================================================== --- sys/kern/uipc_ktls.c +++ sys/kern/uipc_ktls.c @@ -464,7 +464,7 @@ m = PHYS_TO_VM_PAGE(DMAP_TO_PHYS((vm_offset_t)store[i])); for (j = 0; j < atop(ktls_maxlen); j++) { (void)vm_page_unwire_noq(m + j); - vm_page_free(m + j); + vm_page_free_noobj(m + j); } } } @@ -2870,7 +2870,7 @@ for (i = 0; i < m->m_epg_npgs; i++) { pg = PHYS_TO_VM_PAGE(state->parray[i]); (void)vm_page_unwire_noq(pg); - vm_page_free(pg); + vm_page_free_noobj(pg); } } } Index: sys/kern/uipc_mbuf.c =================================================================== --- sys/kern/uipc_mbuf.c +++ sys/kern/uipc_mbuf.c @@ -1852,7 +1852,7 @@ for (int i = 0; i < m->m_epg_npgs; i++) { pg = PHYS_TO_VM_PAGE(m->m_epg_pa[i]); vm_page_unwire_noq(pg); - vm_page_free(pg); + vm_page_free_noobj(pg); } } Index: sys/kern/vfs_bio.c =================================================================== --- sys/kern/vfs_bio.c +++ sys/kern/vfs_bio.c @@ -5069,7 +5069,7 @@ p = bp->b_pages[index]; bp->b_pages[index] = NULL; vm_page_unwire_noq(p); - vm_page_free(p); + vm_page_free_noobj(p); } bp->b_npages = newnpages; } Index: sys/powerpc/aim/mmu_radix.c =================================================================== --- sys/powerpc/aim/mmu_radix.c +++ sys/powerpc/aim/mmu_radix.c @@ -1591,7 +1591,7 @@ m = PHYS_TO_VM_PAGE(DMAP_TO_PHYS((vm_offset_t)pc)); dump_drop_page(m->phys_addr); vm_page_unwire_noq(m); - vm_page_free(m); + vm_page_free_noobj(m); } /* @@ -3275,7 +3275,7 @@ uwptpg->pindex = pmap_l3e_pindex(va); if (pmap_insert_pt_page(pmap, uwptpg)) { vm_page_unwire_noq(uwptpg); - vm_page_free(uwptpg); + vm_page_free_noobj(uwptpg); pmap_abort_ptp(pmap, va, pdpg); return (KERN_RESOURCE_SHORTAGE); } @@ -3298,7 +3298,7 @@ pmap_resident_count_dec(pmap, 1); uwptpg->ref_count = 1; vm_page_unwire_noq(uwptpg); - vm_page_free(uwptpg); + vm_page_free_noobj(uwptpg); } CTR2(KTR_PMAP, "pmap_enter_pde: failure for va %#lx" " in pmap %p", va, pmap); Index: sys/powerpc/booke/pmap_32.c =================================================================== --- sys/powerpc/booke/pmap_32.c +++ sys/powerpc/booke/pmap_32.c @@ -265,7 +265,7 @@ if (nosleep) { ptbl_free_pmap_ptbl(pmap, ptbl); for (j = 0; j < i; j++) - vm_page_free(mtbl[j]); + vm_page_free_noobj(mtbl[j]); vm_wire_sub(i); return (NULL); } Index: sys/powerpc/powerpc/uma_machdep.c =================================================================== --- sys/powerpc/powerpc/uma_machdep.c +++ sys/powerpc/powerpc/uma_machdep.c @@ -92,6 +92,6 @@ dump_drop_page(VM_PAGE_TO_PHYS(m)); #endif vm_page_unwire_noq(m); - vm_page_free(m); + vm_page_free_noobj(m); atomic_subtract_int(&hw_uma_mdpages, 1); } Index: sys/riscv/riscv/pmap.c =================================================================== --- sys/riscv/riscv/pmap.c +++ sys/riscv/riscv/pmap.c @@ -1842,7 +1842,7 @@ m = PHYS_TO_VM_PAGE(DMAP_TO_PHYS((vm_offset_t)pmap->pm_top)); for (i = 0; i < npages; i++) { vm_page_unwire_noq(m); - vm_page_free(m); + vm_page_free_noobj(m); m++; } } @@ -2036,7 +2036,7 @@ m = PHYS_TO_VM_PAGE(DMAP_TO_PHYS((vm_offset_t)pc)); dump_drop_page(m->phys_addr); vm_page_unwire_noq(m); - vm_page_free(m); + vm_page_free_noobj(m); } /* @@ -3546,7 +3546,7 @@ uwptpg->pindex = pmap_l2_pindex(va); if (pmap_insert_pt_page(pmap, uwptpg, true, false)) { vm_page_unwire_noq(uwptpg); - vm_page_free(uwptpg); + vm_page_free_noobj(uwptpg); pmap_abort_ptp(pmap, va, l2pg); return (KERN_RESOURCE_SHORTAGE); } @@ -3567,7 +3567,7 @@ pmap_resident_count_dec(pmap, 1); uwptpg->ref_count = 1; vm_page_unwire_noq(uwptpg); - vm_page_free(uwptpg); + vm_page_free_noobj(uwptpg); } CTR2(KTR_PMAP, "pmap_enter_l2: failed to create PV entry" Index: sys/vm/uma_core.c =================================================================== --- sys/vm/uma_core.c +++ sys/vm/uma_core.c @@ -1923,7 +1923,7 @@ dump_drop_page(VM_PAGE_TO_PHYS(m)); #endif vm_page_unwire_noq(m); - vm_page_free(m); + vm_page_free_noobj(m); } } @@ -1999,7 +1999,7 @@ fail: TAILQ_FOREACH_SAFE(p, &alloctail, plinks.q, p_next) { vm_page_unwire_noq(p); - vm_page_free(p); + vm_page_free_noobj(p); } return (NULL); } @@ -2046,7 +2046,7 @@ */ TAILQ_FOREACH_SAFE(p, &alloctail, plinks.q, p_next) { vm_page_unwire_noq(p); - vm_page_free(p); + vm_page_free_noobj(p); } return (NULL); } @@ -2153,7 +2153,7 @@ paddr = pmap_kextract(curva); m = PHYS_TO_VM_PAGE(paddr); vm_page_unwire_noq(m); - vm_page_free(m); + vm_page_free_noobj(m); } pmap_qremove(sva, size >> PAGE_SHIFT); kva_free(sva, size); @@ -2170,7 +2170,7 @@ dump_drop_page(pa); m = PHYS_TO_VM_PAGE(pa); vm_page_unwire_noq(m); - vm_page_free(m); + vm_page_free_noobj(m); } #endif Index: sys/vm/vm_kern.c =================================================================== --- sys/vm/vm_kern.c +++ sys/vm/vm_kern.c @@ -955,7 +955,7 @@ vmd = vm_pagequeue_domain(m); vm_domain_free_lock(vmd); - vm_phys_free_pages(m, m->pool, 0); + vm_phys_free_pages(m, VM_FREEPOOL_DIRECT, 0); vm_domain_free_unlock(vmd); vm_domain_freecnt_inc(vmd, 1); Index: sys/vm/vm_page.h =================================================================== --- sys/vm/vm_page.h +++ sys/vm/vm_page.h @@ -602,6 +602,7 @@ void vm_page_busy_sleep_unlocked(vm_object_t obj, vm_page_t m, vm_pindex_t pindex, const char *wmesg, int allocflags); void vm_page_free(vm_page_t m); +void vm_page_free_noobj(vm_page_t m); void vm_page_free_zero(vm_page_t m); void vm_page_activate (vm_page_t); Index: sys/vm/vm_page.c =================================================================== --- sys/vm/vm_page.c +++ sys/vm/vm_page.c @@ -169,7 +169,7 @@ static void vm_page_clear_dirty_mask(vm_page_t m, vm_page_bits_t pagebits); static void vm_page_enqueue(vm_page_t m, uint8_t queue); static bool vm_page_free_prep(vm_page_t m); -static void vm_page_free_toq(vm_page_t m); +static void vm_page_free_toq(vm_page_t m, int pool); static void vm_page_init(void *dummy); static void vm_page_insert_radixdone(vm_page_t m, vm_object_t object, vm_page_t mpred); @@ -1371,14 +1371,27 @@ /* * vm_page_free: * - * Free a page. + * Free an object-mapped page. */ void vm_page_free(vm_page_t m) { m->flags &= ~PG_ZERO; - vm_page_free_toq(m); + vm_page_free_toq(m, VM_FREEPOOL_DEFAULT); +} + +/* + * vm_page_free_noobj: + * + * Free a non-object-mapped page. + */ +void +vm_page_free_noobj(vm_page_t m) +{ + + m->flags &= ~PG_ZERO; + vm_page_free_toq(m, VM_FREEPOOL_DIRECT); } /* @@ -1391,7 +1404,7 @@ { m->flags |= PG_ZERO; - vm_page_free_toq(m); + vm_page_free_toq(m, VM_FREEPOOL_DIRECT); } /* @@ -1693,8 +1706,7 @@ vm_radix_iter_remove(pages); vm_page_free_object_prep(m); vm_page_xunbusy(m); - m->flags &= ~PG_ZERO; - vm_page_free_toq(m); + vm_page_free(m); } /* @@ -2220,7 +2232,6 @@ m->flags = flags; m->a.flags = 0; m->oflags = (object->flags & OBJ_UNMANAGED) != 0 ? VPO_UNMANAGED : 0; - m->pool = VM_FREEPOOL_DEFAULT; if ((req & (VM_ALLOC_NOBUSY | VM_ALLOC_SBUSY)) == 0) m->busy_lock = VPB_CURTHREAD_EXCLUSIVE; else if ((req & VM_ALLOC_SBUSY) != 0) @@ -2242,7 +2253,7 @@ m->oflags = VPO_UNMANAGED; m->busy_lock = VPB_UNBUSIED; /* Don't change PG_ZERO. */ - vm_page_free_toq(m); + vm_page_free_toq(m, VM_FREEPOOL_DEFAULT); if (req & VM_ALLOC_WAITFAIL) { VM_OBJECT_WUNLOCK(object); vm_radix_wait(); @@ -2440,7 +2451,6 @@ m->ref_count = 1; m->a.act_count = 0; m->oflags = oflags; - m->pool = VM_FREEPOOL_DEFAULT; if (vm_page_iter_insert(&pages, m, object, pindex, mpred)) { if ((req & VM_ALLOC_WIRED) != 0) vm_wire_sub(npages); @@ -2454,7 +2464,7 @@ m->oflags = VPO_UNMANAGED; m->busy_lock = VPB_UNBUSIED; /* Don't change PG_ZERO. */ - vm_page_free_toq(m); + vm_page_free_toq(m, VM_FREEPOOL_DEFAULT); } if (req & VM_ALLOC_WAITFAIL) { VM_OBJECT_WUNLOCK(object); @@ -2538,7 +2548,6 @@ m->flags = (m->flags & PG_ZERO) | flags; m->a.flags = 0; m->oflags = VPO_UNMANAGED; - m->pool = VM_FREEPOOL_DIRECT; m->busy_lock = VPB_UNBUSIED; if ((req & VM_ALLOC_WIRED) != 0) { vm_wire_add(1); @@ -2714,7 +2723,6 @@ m->ref_count = 1; m->a.act_count = 0; m->oflags = VPO_UNMANAGED; - m->pool = VM_FREEPOOL_DIRECT; /* * Zero the page before updating any mappings since the page is @@ -3178,7 +3186,7 @@ do { MPASS(vm_page_domain(m) == domain); SLIST_REMOVE_HEAD(&free, plinks.s.ss); - vm_phys_free_pages(m, m->pool, 0); + vm_phys_free_pages(m, VM_FREEPOOL_DEFAULT, 0); cnt++; } while ((m = SLIST_FIRST(&free)) != NULL); vm_domain_free_unlock(vmd); @@ -4167,7 +4175,7 @@ * belongs to an object. */ static void -vm_page_free_toq(vm_page_t m) +vm_page_free_toq(vm_page_t m, int pool) { struct vm_domain *vmd; uma_zone_t zone; @@ -4180,13 +4188,13 @@ vm_page_free_nofree(vmd, m); return; } - zone = vmd->vmd_pgcache[m->pool].zone; + zone = vmd->vmd_pgcache[pool].zone; if ((m->flags & PG_PCPU_CACHE) != 0 && zone != NULL) { uma_zfree(zone, m); return; } vm_domain_free_lock(vmd); - vm_phys_free_pages(m, m->pool, 0); + vm_phys_free_pages(m, pool, 0); vm_domain_free_unlock(vmd); vm_domain_freecnt_inc(vmd, 1); } @@ -4194,9 +4202,8 @@ /* * vm_page_free_pages_toq: * - * Returns a list of pages to the free list, disassociating it - * from any VM object. In other words, this is equivalent to - * calling vm_page_free_toq() for each page of a list of VM objects. + * Returns a list of pages to the free list. Each page is + * not associated with an object. */ int vm_page_free_pages_toq(struct spglist *free, bool update_wire_count) @@ -4211,7 +4218,7 @@ while ((m = SLIST_FIRST(free)) != NULL) { count++; SLIST_REMOVE_HEAD(free, plinks.s.ss); - vm_page_free_toq(m); + vm_page_free_toq(m, VM_FREEPOOL_DIRECT); } if (update_wire_count)