From 20b2c33d9ae555690e09419a1d176600738a144a Mon Sep 17 00:00:00 2001 From: dg Date: Wed, 28 Oct 1998 13:37:02 +0000 Subject: Added a second argument, "activate" to the vm_page_unwire() call so that the caller can select either inactive or active queue to put the page on. --- sys/alpha/alpha/pmap.c | 7 +++---- sys/amd64/amd64/pmap.c | 7 +++---- sys/fs/procfs/procfs_mem.c | 4 ++-- sys/i386/i386/pmap.c | 7 +++---- sys/kern/kern_exec.c | 4 ++-- sys/kern/sys_pipe.c | 6 +++--- sys/kern/vfs_bio.c | 14 ++++++-------- sys/miscfs/procfs/procfs_mem.c | 4 ++-- sys/vm/vm_fault.c | 6 +++--- sys/vm/vm_page.c | 20 ++++++++++++++------ sys/vm/vm_page.h | 4 ++-- 11 files changed, 43 insertions(+), 40 deletions(-) diff --git a/sys/alpha/alpha/pmap.c b/sys/alpha/alpha/pmap.c index f90cebd..0e7aa73 100644 --- a/sys/alpha/alpha/pmap.c +++ b/sys/alpha/alpha/pmap.c @@ -43,7 +43,7 @@ * from: @(#)pmap.c 7.7 (Berkeley) 5/12/91 * from: i386 Id: pmap.c,v 1.193 1998/04/19 15:22:48 bde Exp * with some ideas from NetBSD's alpha pmap - * $Id: pmap.c,v 1.10 1998/09/04 18:49:35 dfr Exp $ + * $Id: pmap.c,v 1.11 1998/10/21 11:38:06 dg Exp $ */ /* @@ -1045,7 +1045,7 @@ pmap_dispose_proc(p) *(ptek + i) = 0; pmap_invalidate_page(kernel_pmap, (vm_offset_t)p->p_addr + i * PAGE_SIZE); - vm_page_unwire(m); + vm_page_unwire(m, 0); vm_page_free(m); } } @@ -1069,8 +1069,7 @@ pmap_swapout_proc(p) if ((m = vm_page_lookup(upobj, i)) == NULL) panic("pmap_swapout_proc: upage already missing???"); m->dirty = VM_PAGE_BITS_ALL; - vm_page_unwire(m); - vm_page_deactivate(m); + vm_page_unwire(m, 0); pmap_kremove( (vm_offset_t) p->p_addr + PAGE_SIZE * i); } } diff --git a/sys/amd64/amd64/pmap.c b/sys/amd64/amd64/pmap.c index 7f49409..35444a4 100644 --- a/sys/amd64/amd64/pmap.c +++ b/sys/amd64/amd64/pmap.c @@ -39,7 +39,7 @@ * SUCH DAMAGE. * * from: @(#)pmap.c 7.7 (Berkeley) 5/12/91 - * $Id: pmap.c,v 1.209 1998/09/06 23:04:20 tegge Exp $ + * $Id: pmap.c,v 1.210 1998/10/21 11:38:14 dg Exp $ */ /* @@ -1046,7 +1046,7 @@ pmap_dispose_proc(p) *(ptek + i) = 0; if ((oldpte & PG_G) || (cpu_class > CPUCLASS_386)) invlpg((vm_offset_t) p->p_addr + i * PAGE_SIZE); - vm_page_unwire(m); + vm_page_unwire(m, 0); vm_page_free(m); } @@ -1073,8 +1073,7 @@ pmap_swapout_proc(p) if ((m = vm_page_lookup(upobj, i)) == NULL) panic("pmap_swapout_proc: upage already missing???"); m->dirty = VM_PAGE_BITS_ALL; - vm_page_unwire(m); - vm_page_deactivate(m); + vm_page_unwire(m, 0); pmap_kremove( (vm_offset_t) p->p_addr + PAGE_SIZE * i); } } diff --git a/sys/fs/procfs/procfs_mem.c b/sys/fs/procfs/procfs_mem.c index c1012f1..22d8f74 100644 --- a/sys/fs/procfs/procfs_mem.c +++ b/sys/fs/procfs/procfs_mem.c @@ -37,7 +37,7 @@ * * @(#)procfs_mem.c 8.5 (Berkeley) 6/15/94 * - * $Id: procfs_mem.c,v 1.33 1998/06/07 17:11:57 dfr Exp $ + * $Id: procfs_mem.c,v 1.34 1998/07/15 02:32:19 bde Exp $ */ /* @@ -253,7 +253,7 @@ procfs_rwmem(curp, p, uio) /* * release the page and the object */ - vm_page_unwire(m); + vm_page_unwire(m, 1); vm_object_deallocate(object); object = NULL; diff --git a/sys/i386/i386/pmap.c b/sys/i386/i386/pmap.c index 7f49409..35444a4 100644 --- a/sys/i386/i386/pmap.c +++ b/sys/i386/i386/pmap.c @@ -39,7 +39,7 @@ * SUCH DAMAGE. * * from: @(#)pmap.c 7.7 (Berkeley) 5/12/91 - * $Id: pmap.c,v 1.209 1998/09/06 23:04:20 tegge Exp $ + * $Id: pmap.c,v 1.210 1998/10/21 11:38:14 dg Exp $ */ /* @@ -1046,7 +1046,7 @@ pmap_dispose_proc(p) *(ptek + i) = 0; if ((oldpte & PG_G) || (cpu_class > CPUCLASS_386)) invlpg((vm_offset_t) p->p_addr + i * PAGE_SIZE); - vm_page_unwire(m); + vm_page_unwire(m, 0); vm_page_free(m); } @@ -1073,8 +1073,7 @@ pmap_swapout_proc(p) if ((m = vm_page_lookup(upobj, i)) == NULL) panic("pmap_swapout_proc: upage already missing???"); m->dirty = VM_PAGE_BITS_ALL; - vm_page_unwire(m); - vm_page_deactivate(m); + vm_page_unwire(m, 0); pmap_kremove( (vm_offset_t) p->p_addr + PAGE_SIZE * i); } } diff --git a/sys/kern/kern_exec.c b/sys/kern/kern_exec.c index d30d9c2..4200adf 100644 --- a/sys/kern/kern_exec.c +++ b/sys/kern/kern_exec.c @@ -23,7 +23,7 @@ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * - * $Id: kern_exec.c,v 1.86 1998/09/04 08:06:55 dfr Exp $ + * $Id: kern_exec.c,v 1.87 1998/10/16 03:55:00 peter Exp $ */ #include @@ -408,7 +408,7 @@ exec_unmap_first_page(imgp) { if (imgp->firstpage) { pmap_kremove((vm_offset_t) imgp->image_header); - vm_page_unwire(imgp->firstpage); + vm_page_unwire(imgp->firstpage, 1); imgp->firstpage = NULL; } } diff --git a/sys/kern/sys_pipe.c b/sys/kern/sys_pipe.c index 9b60e26..5f67897 100644 --- a/sys/kern/sys_pipe.c +++ b/sys/kern/sys_pipe.c @@ -16,7 +16,7 @@ * 4. Modifications may be freely made to this file if the above conditions * are met. * - * $Id: sys_pipe.c,v 1.42 1998/06/07 17:11:39 dfr Exp $ + * $Id: sys_pipe.c,v 1.43 1998/10/13 08:24:40 dg Exp $ */ /* @@ -502,7 +502,7 @@ pipe_build_write_buffer(wpipe, uio) if (!paddr) { int j; for(j=0;jpipe_map.ms[j]); + vm_page_unwire(wpipe->pipe_map.ms[j], 1); return EFAULT; } @@ -566,7 +566,7 @@ struct pipe *wpipe; } } for (i=0;ipipe_map.npages;i++) - vm_page_unwire(wpipe->pipe_map.ms[i]); + vm_page_unwire(wpipe->pipe_map.ms[i], 1); } /* diff --git a/sys/kern/vfs_bio.c b/sys/kern/vfs_bio.c index 8084f3d..e4946b1 100644 --- a/sys/kern/vfs_bio.c +++ b/sys/kern/vfs_bio.c @@ -11,7 +11,7 @@ * 2. Absolutely no warranty of function or purpose is made by the author * John S. Dyson. * - * $Id: vfs_bio.c,v 1.179 1998/10/13 08:24:40 dg Exp $ + * $Id: vfs_bio.c,v 1.180 1998/10/25 17:44:52 phk Exp $ */ /* @@ -794,7 +794,8 @@ vfs_vmio_release(bp) for (i = 0; i < bp->b_npages; i++) { m = bp->b_pages[i]; bp->b_pages[i] = NULL; - vm_page_unwire(m); + if ((bp->b_flags & B_ASYNC) == 0) + vm_page_unwire(m, (bp->b_flags & B_ASYNC) == 0 ? 0 : 1); /* * We don't mess with busy pages, it is @@ -806,6 +807,7 @@ vfs_vmio_release(bp) if (m->wire_count == 0) { + vm_page_flag_clear(m, PG_ZERO); /* * If this is an async free -- we cannot place * pages onto the cache queue. If it is an @@ -830,9 +832,6 @@ vfs_vmio_release(bp) */ if (m->dirty == 0 && m->hold_count == 0) vm_page_cache(m); - else - vm_page_deactivate(m); - vm_page_flag_clear(m, PG_ZERO); } else if (m->hold_count == 0) { vm_page_busy(m); vm_page_protect(m, VM_PROT_NONE); @@ -844,7 +843,6 @@ vfs_vmio_release(bp) * act_count. */ m->act_count = 0; - vm_page_flag_clear(m, PG_ZERO); } } } @@ -1714,7 +1712,7 @@ allocbuf(struct buf * bp, int size) vm_page_sleep(m, "biodep", &m->busy); bp->b_pages[i] = NULL; - vm_page_unwire(m); + vm_page_unwire(m, 0); } pmap_qremove((vm_offset_t) trunc_page((vm_offset_t)bp->b_data) + (desiredpages << PAGE_SHIFT), (bp->b_npages - desiredpages)); @@ -2376,7 +2374,7 @@ vm_hold_free_pages(struct buf * bp, vm_offset_t from, vm_offset_t to) bp->b_pages[index] = NULL; pmap_kremove(pg); vm_page_busy(p); - vm_page_unwire(p); + vm_page_unwire(p, 0); vm_page_free(p); } } diff --git a/sys/miscfs/procfs/procfs_mem.c b/sys/miscfs/procfs/procfs_mem.c index c1012f1..22d8f74 100644 --- a/sys/miscfs/procfs/procfs_mem.c +++ b/sys/miscfs/procfs/procfs_mem.c @@ -37,7 +37,7 @@ * * @(#)procfs_mem.c 8.5 (Berkeley) 6/15/94 * - * $Id: procfs_mem.c,v 1.33 1998/06/07 17:11:57 dfr Exp $ + * $Id: procfs_mem.c,v 1.34 1998/07/15 02:32:19 bde Exp $ */ /* @@ -253,7 +253,7 @@ procfs_rwmem(curp, p, uio) /* * release the page and the object */ - vm_page_unwire(m); + vm_page_unwire(m, 1); vm_object_deallocate(object); object = NULL; diff --git a/sys/vm/vm_fault.c b/sys/vm/vm_fault.c index 9178d4d..1d6b0f2 100644 --- a/sys/vm/vm_fault.c +++ b/sys/vm/vm_fault.c @@ -66,7 +66,7 @@ * any improvements or extensions that they make and grant Carnegie the * rights to redistribute these changes. * - * $Id: vm_fault.c,v 1.88 1998/09/04 08:06:57 dfr Exp $ + * $Id: vm_fault.c,v 1.89 1998/10/25 17:44:58 phk Exp $ */ /* @@ -738,7 +738,7 @@ readrest: if (wired) vm_page_wire(fs.m); else - vm_page_unwire(fs.m); + vm_page_unwire(fs.m, 1); } else { vm_page_activate(fs.m); } @@ -870,7 +870,7 @@ vm_fault_unwire(map, start, end) pa = pmap_extract(pmap, va); if (pa != (vm_offset_t) 0) { pmap_change_wiring(pmap, va, FALSE); - vm_page_unwire(PHYS_TO_VM_PAGE(pa)); + vm_page_unwire(PHYS_TO_VM_PAGE(pa), 1); } } diff --git a/sys/vm/vm_page.c b/sys/vm/vm_page.c index b2225e7..f084d4a 100644 --- a/sys/vm/vm_page.c +++ b/sys/vm/vm_page.c @@ -34,7 +34,7 @@ * SUCH DAMAGE. * * from: @(#)vm_page.c 7.4 (Berkeley) 5/7/91 - * $Id: vm_page.c,v 1.109 1998/10/21 14:46:41 dg Exp $ + * $Id: vm_page.c,v 1.110 1998/10/25 17:44:59 phk Exp $ */ /* @@ -1252,8 +1252,9 @@ vm_page_wire(m) * The page queues must be locked. */ void -vm_page_unwire(m) +vm_page_unwire(m, activate) register vm_page_t m; + int activate; { int s; @@ -1265,10 +1266,17 @@ vm_page_unwire(m) if (m->object) m->object->wire_count--; cnt.v_wire_count--; - TAILQ_INSERT_TAIL(&vm_page_queue_active, m, pageq); - m->queue = PQ_ACTIVE; - (*vm_page_queues[PQ_ACTIVE].lcnt)++; - cnt.v_active_count++; + if (activate) { + TAILQ_INSERT_TAIL(&vm_page_queue_active, m, pageq); + m->queue = PQ_ACTIVE; + (*vm_page_queues[PQ_ACTIVE].lcnt)++; + cnt.v_active_count++; + } else { + TAILQ_INSERT_TAIL(&vm_page_queue_inactive, m, pageq); + m->queue = PQ_INACTIVE; + (*vm_page_queues[PQ_INACTIVE].lcnt)++; + cnt.v_inactive_count++; + } } } else { #if !defined(MAX_PERF) diff --git a/sys/vm/vm_page.h b/sys/vm/vm_page.h index c08602b..26231a2 100644 --- a/sys/vm/vm_page.h +++ b/sys/vm/vm_page.h @@ -61,7 +61,7 @@ * any improvements or extensions that they make and grant Carnegie the * rights to redistribute these changes. * - * $Id: vm_page.h,v 1.46 1998/09/04 08:06:57 dfr Exp $ + * $Id: vm_page.h,v 1.47 1998/10/21 14:46:42 dg Exp $ */ /* @@ -361,7 +361,7 @@ vm_page_t vm_page_lookup __P((vm_object_t, vm_pindex_t)); void vm_page_remove __P((vm_page_t)); void vm_page_rename __P((vm_page_t, vm_object_t, vm_pindex_t)); vm_offset_t vm_page_startup __P((vm_offset_t, vm_offset_t, vm_offset_t)); -void vm_page_unwire __P((vm_page_t)); +void vm_page_unwire __P((vm_page_t, int)); void vm_page_wire __P((vm_page_t)); void vm_page_unqueue __P((vm_page_t)); void vm_page_unqueue_nowakeup __P((vm_page_t)); -- cgit v1.1