From ea41812fe5dd8f308e8bc2f1d862cbe032eb88d7 Mon Sep 17 00:00:00 2001 From: Alan Cox Date: Sun, 16 May 1999 05:07:34 +0000 Subject: [PATCH] Remove prototypes for functions that don't exist anymore (vm_map.h). Remove a useless argument from vm_map_madvise's interface (vm_map.c, vm_map.h, and vm_mmap.c). Remove a redundant test in vm_uiomove (vm_map.c). Make two changes to vm_object_coalesce: 1. Determine whether the new range of pages actually overlaps the existing object's range of pages before calling vm_object_page_remove. (Prior to this change almost 90% of the calls to vm_object_page_remove were to remove pages that were beyond the end of the object.) 2. Free any swap space allocated to removed pages. --- sys/vm/vm_map.c | 11 ++++------- sys/vm/vm_map.h | 6 ++---- sys/vm/vm_mmap.c | 9 ++------- sys/vm/vm_object.c | 24 ++++++++++++++---------- 4 files changed, 22 insertions(+), 28 deletions(-) diff --git a/sys/vm/vm_map.c b/sys/vm/vm_map.c index f43164ed94d1..d9c3f04ad20d 100644 --- a/sys/vm/vm_map.c +++ b/sys/vm/vm_map.c @@ -61,7 +61,7 @@ * any improvements or extensions that they make and grant Carnegie the * rights to redistribute these changes. * - * $Id: vm_map.c,v 1.160 1999/04/04 07:11:02 alc Exp $ + * $Id: vm_map.c,v 1.161 1999/05/14 23:09:32 alc Exp $ */ /* @@ -1231,9 +1231,8 @@ vm_map_protect(vm_map_t map, vm_offset_t start, vm_offset_t end, * system call. */ void -vm_map_madvise(map, pmap, start, end, advise) +vm_map_madvise(map, start, end, advise) vm_map_t map; - pmap_t pmap; vm_offset_t start, end; int advise; { @@ -1311,7 +1310,7 @@ vm_map_madvise(map, pmap, start, end, advise) count = OFF_TO_IDX(size); vm_object_madvise(current->object.vm_object, pindex, count, advise); - pmap_object_init_pt(pmap, current->start, + pmap_object_init_pt(map->pmap, current->start, current->object.vm_object, pindex, (count << PAGE_SHIFT), 0); } @@ -2731,9 +2730,7 @@ vm_uiomove(mapa, srcobject, cp, cnta, uaddra, npages) /* * Remove unneeded old pages */ - if (first_object->resident_page_count) { - vm_object_page_remove (first_object, 0, 0, 0); - } + vm_object_page_remove(first_object, 0, 0, 0); /* * Invalidate swap space diff --git a/sys/vm/vm_map.h b/sys/vm/vm_map.h index 871934bcd09d..2f07515f5ef3 100644 --- a/sys/vm/vm_map.h +++ b/sys/vm/vm_map.h @@ -61,7 +61,7 @@ * any improvements or extensions that they make and grant Carnegie the * rights to redistribute these changes. * - * $Id: vm_map.h,v 1.38 1999/03/06 07:11:33 alc Exp $ + * $Id: vm_map.h,v 1.39 1999/05/14 23:09:34 alc Exp $ */ /* @@ -342,12 +342,10 @@ int vm_map_pageable __P((vm_map_t, vm_offset_t, vm_offset_t, boolean_t)); int vm_map_user_pageable __P((vm_map_t, vm_offset_t, vm_offset_t, boolean_t)); int vm_map_clean __P((vm_map_t, vm_offset_t, vm_offset_t, boolean_t, boolean_t)); int vm_map_protect __P((vm_map_t, vm_offset_t, vm_offset_t, vm_prot_t, boolean_t)); -void vm_map_reference __P((vm_map_t)); int vm_map_remove __P((vm_map_t, vm_offset_t, vm_offset_t)); -void vm_map_simplify __P((vm_map_t, vm_offset_t)); void vm_map_startup __P((void)); int vm_map_submap __P((vm_map_t, vm_offset_t, vm_offset_t, vm_map_t)); -void vm_map_madvise __P((vm_map_t, pmap_t, vm_offset_t, vm_offset_t, int)); +void vm_map_madvise __P((vm_map_t, vm_offset_t, vm_offset_t, int)); void vm_map_simplify_entry __P((vm_map_t, vm_map_entry_t)); void vm_init2 __P((void)); int vm_uiomove __P((vm_map_t, vm_object_t, off_t, int, vm_offset_t, int *)); diff --git a/sys/vm/vm_mmap.c b/sys/vm/vm_mmap.c index 3f5cba1d09f4..bab89127c05d 100644 --- a/sys/vm/vm_mmap.c +++ b/sys/vm/vm_mmap.c @@ -38,7 +38,7 @@ * from: Utah $Hdr: vm_mmap.c 1.6 91/10/21$ * * @(#)vm_mmap.c 8.4 (Berkeley) 1/12/94 - * $Id: vm_mmap.c,v 1.96 1999/05/06 22:06:45 peter Exp $ + * $Id: vm_mmap.c,v 1.97 1999/05/14 23:09:34 alc Exp $ */ /* @@ -616,8 +616,6 @@ madvise(p, uap) struct proc *p; struct madvise_args *uap; { - vm_map_t map; - pmap_t pmap; vm_offset_t start, end; /* * Check for illegal addresses. Watch out for address wrap... Note @@ -640,10 +638,7 @@ madvise(p, uap) start = trunc_page((vm_offset_t) uap->addr); end = round_page((vm_offset_t) uap->addr + uap->len); - map = &p->p_vmspace->vm_map; - pmap = vmspace_pmap(p->p_vmspace); - - vm_map_madvise(map, pmap, start, end, uap->behav); + vm_map_madvise(&p->p_vmspace->vm_map, start, end, uap->behav); return (0); } diff --git a/sys/vm/vm_object.c b/sys/vm/vm_object.c index 398e3deac32e..e53756ada2f6 100644 --- a/sys/vm/vm_object.c +++ b/sys/vm/vm_object.c @@ -61,7 +61,7 @@ * any improvements or extensions that they make and grant Carnegie the * rights to redistribute these changes. * - * $Id: vm_object.c,v 1.152 1999/02/24 21:26:26 dillon Exp $ + * $Id: vm_object.c,v 1.153 1999/03/14 06:36:00 alc Exp $ */ /* @@ -1453,7 +1453,7 @@ vm_object_coalesce(prev_object, prev_pindex, prev_size, next_size) vm_pindex_t prev_pindex; vm_size_t prev_size, next_size; { - vm_size_t newsize; + vm_pindex_t next_pindex; if (prev_object == NULL) { return (TRUE); @@ -1481,9 +1481,10 @@ vm_object_coalesce(prev_object, prev_pindex, prev_size, next_size) prev_size >>= PAGE_SHIFT; next_size >>= PAGE_SHIFT; + next_pindex = prev_pindex + prev_size; if ((prev_object->ref_count > 1) && - (prev_object->size != prev_pindex + prev_size)) { + (prev_object->size != next_pindex)) { return (FALSE); } @@ -1491,17 +1492,20 @@ vm_object_coalesce(prev_object, prev_pindex, prev_size, next_size) * Remove any pages that may still be in the object from a previous * deallocation. */ - - vm_object_page_remove(prev_object, - prev_pindex + prev_size, - prev_pindex + prev_size + next_size, FALSE); + if (next_pindex < prev_object->size) { + vm_object_page_remove(prev_object, + next_pindex, + next_pindex + next_size, FALSE); + if (prev_object->type == OBJT_SWAP) + swap_pager_freespace(prev_object, + next_pindex, next_size); + } /* * Extend the object if necessary. */ - newsize = prev_pindex + prev_size + next_size; - if (newsize > prev_object->size) - prev_object->size = newsize; + if (next_pindex + next_size > prev_object->size) + prev_object->size = next_pindex + next_size; return (TRUE); }