Index: sys/amd64/amd64/pmap.c =================================================================== --- sys/amd64/amd64/pmap.c +++ sys/amd64/amd64/pmap.c @@ -2901,7 +2901,7 @@ /* entire chunk is free, return it */ m = PHYS_TO_VM_PAGE(DMAP_TO_PHYS((vm_offset_t)pc)); dump_drop_page(m->phys_addr); - vm_page_unwire(m, PQ_INACTIVE); + vm_page_unwire(m, PQ_NONE); vm_page_free(m); } Index: sys/arm/arm/pmap-v6.c =================================================================== --- sys/arm/arm/pmap-v6.c +++ sys/arm/arm/pmap-v6.c @@ -4238,7 +4238,7 @@ /* entire chunk is free, return it */ m = PHYS_TO_VM_PAGE(pmap_kextract((vm_offset_t)pc)); pmap_qremove((vm_offset_t)pc, 1); - vm_page_unwire(m, PQ_INACTIVE); + vm_page_unwire(m, PQ_NONE); vm_page_free(m); pmap_ptelist_free(&pv_vafree, (vm_offset_t)pc); 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 @@ -135,7 +135,7 @@ KASSERT((m->oflags & VPO_UNMANAGED) == 0, ("ttm got unmanaged %p", m)); m->flags &= ~PG_FICTITIOUS; m->oflags |= VPO_UNMANAGED; - vm_page_unwire(m, PQ_INACTIVE); + vm_page_unwire(m, PQ_NONE); vm_page_free(m); } Index: sys/i386/i386/pmap.c =================================================================== --- sys/i386/i386/pmap.c +++ sys/i386/i386/pmap.c @@ -2380,7 +2380,7 @@ /* entire chunk is free, return it */ m = PHYS_TO_VM_PAGE(pmap_kextract((vm_offset_t)pc)); pmap_qremove((vm_offset_t)pc, 1); - vm_page_unwire(m, PQ_INACTIVE); + vm_page_unwire(m, PQ_NONE); vm_page_free(m); pmap_ptelist_free(&pv_vafree, (vm_offset_t)pc); } Index: sys/i386/xen/pmap.c =================================================================== --- sys/i386/xen/pmap.c +++ sys/i386/xen/pmap.c @@ -2139,7 +2139,7 @@ /* entire chunk is free, return it */ m = PHYS_TO_VM_PAGE(pmap_kextract((vm_offset_t)pc)); pmap_qremove((vm_offset_t)pc, 1); - vm_page_unwire(m, PQ_INACTIVE); + vm_page_unwire(m, PQ_NONE); vm_page_free(m); pmap_ptelist_free(&pv_vafree, (vm_offset_t)pc); } Index: sys/kern/uipc_syscalls.c =================================================================== --- sys/kern/uipc_syscalls.c +++ sys/kern/uipc_syscalls.c @@ -1850,16 +1850,17 @@ vm_page_t pg = sf_buf_page(sf); sf_buf_free(sf); - vm_page_lock(pg); - vm_page_unwire(pg, PQ_INACTIVE); /* * Check for the object going away on us. This can * happen since we don't hold a reference to it. * If so, we're responsible for freeing the page. */ - if (pg->wire_count == 0 && pg->object == NULL) + if (pg->wire_count == 1 && pg->object == NULL) { + vm_page_unwire(pg, PQ_NONE); vm_page_free(pg); + } else + vm_page_unwire(pg, PQ_INACTIVE); vm_page_unlock(pg); if (sfs != NULL) { @@ -2052,14 +2053,15 @@ } else if (m != NULL) { free_page: vm_page_lock(m); - vm_page_unwire(m, PQ_INACTIVE); - /* * See if anyone else might know about this page. If * not and it is not valid, then free it. */ - if (m->wire_count == 0 && m->valid == 0 && !vm_page_busied(m)) + if (m->wire_count == 1 && m->valid == 0 && !vm_page_busied(m)) { + vm_page_unwire(m, PQ_NONE); vm_page_free(m); + } else + vm_page_unwire(m, PQ_INACTIVE); vm_page_unlock(m); } KASSERT(error != 0 || (m->wire_count > 0 && Index: sys/kern/vfs_bio.c =================================================================== --- sys/kern/vfs_bio.c +++ sys/kern/vfs_bio.c @@ -1903,7 +1903,11 @@ * everything on the inactive queue. */ vm_page_lock(m); - vm_page_unwire(m, PQ_INACTIVE); + if (((bp->b_flags & B_ASYNC) == 0 && !m->valid) && + (m->wire_count == 0 && !vm_page_busied(m))) + vm_page_unwire(m, PQ_NONE); + else + vm_page_unwire(m, PQ_INACTIVE); /* * Might as well free the page if we can and it has Index: sys/mips/mips/pmap.c =================================================================== --- sys/mips/mips/pmap.c +++ sys/mips/mips/pmap.c @@ -1527,7 +1527,7 @@ PV_STAT(pc_chunk_frees++); /* entire chunk is free, return it */ m = PHYS_TO_VM_PAGE(MIPS_DIRECT_TO_PHYS((vm_offset_t)pc)); - vm_page_unwire(m, PQ_INACTIVE); + vm_page_unwire(m, PQ_NONE); vm_page_free(m); } Index: sys/net/bpf_zerocopy.c =================================================================== --- sys/net/bpf_zerocopy.c +++ sys/net/bpf_zerocopy.c @@ -114,9 +114,11 @@ { vm_page_lock(pp); - vm_page_unwire(pp, PQ_INACTIVE); - if (pp->wire_count == 0 && pp->object == NULL) + if (pp->wire_count == 0 && pp->object == NULL) { + vm_page_unwire(pp, PQ_NONE); vm_page_free(pp); + } else + vm_page_unwire(pp, PQ_INACTIVE); vm_page_unlock(pp); } Index: sys/vm/uma_core.c =================================================================== --- sys/vm/uma_core.c +++ sys/vm/uma_core.c @@ -1154,7 +1154,7 @@ * exit. */ TAILQ_FOREACH_SAFE(p, &alloctail, listq, p_next) { - vm_page_unwire(p, PQ_INACTIVE); + vm_page_unwire(p, PQ_NONE); vm_page_free(p); } return (NULL); Index: sys/vm/vm_glue.c =================================================================== --- sys/vm/vm_glue.c +++ sys/vm/vm_glue.c @@ -422,7 +422,7 @@ if (m == NULL) panic("vm_thread_dispose: kstack already missing?"); vm_page_lock(m); - vm_page_unwire(m, PQ_INACTIVE); + vm_page_unwire(m, PQ_NONE); vm_page_free(m); vm_page_unlock(m); } Index: sys/vm/vm_kern.c =================================================================== --- sys/vm/vm_kern.c +++ sys/vm/vm_kern.c @@ -191,9 +191,8 @@ pmap_remove(kernel_pmap, addr, addr + i); while (i != 0) { i -= PAGE_SIZE; - m = vm_page_lookup(object, - OFF_TO_IDX(offset + i)); - vm_page_unwire(m, PQ_INACTIVE); + m = vm_page_lookup(object, OFF_TO_IDX(offset + i)); + vm_page_unwire(m, PQ_NONE); vm_page_free(m); } vmem_free(vmem, addr, size); @@ -366,9 +365,8 @@ pmap_remove(kernel_pmap, addr, addr + i); while (i != 0) { i -= PAGE_SIZE; - m = vm_page_lookup(object, - OFF_TO_IDX(offset + i)); - vm_page_unwire(m, PQ_INACTIVE); + m = vm_page_lookup(object, OFF_TO_IDX(offset + i)); + vm_page_unwire(m, PQ_NONE); vm_page_free(m); } VM_OBJECT_WUNLOCK(object); @@ -402,7 +400,7 @@ VM_OBJECT_WLOCK(object); for (i = 0; i < size; i += PAGE_SIZE) { m = vm_page_lookup(object, OFF_TO_IDX(offset + i)); - vm_page_unwire(m, PQ_INACTIVE); + vm_page_unwire(m, PQ_NONE); vm_page_free(m); } VM_OBJECT_WUNLOCK(object);