--- Net2/vm/vm_kern.c 2018/04/24 18:06:52 1.1.1.3 +++ Net2/vm/vm_kern.c 2018/04/24 18:15:14 1.1.1.5 @@ -33,7 +33,8 @@ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * - * @(#)vm_kern.c 7.4 (Berkeley) 5/7/91 + * from: @(#)vm_kern.c 7.4 (Berkeley) 5/7/91 + * vm_kern.c,v 1.6 1993/07/15 13:33:46 cgd Exp * * * Copyright (c) 1987, 1990 Carnegie-Mellon University. @@ -214,6 +215,7 @@ void kmem_free(map, addr, size) vm_size_t size; { (void) vm_map_remove(map, trunc_page(addr), round_page(addr + size)); + vm_map_simplify(map, addr); } /* @@ -361,17 +363,21 @@ kmem_malloc(map, size, canwait) vm_page_t m; extern vm_object_t kmem_object; - if (map != kmem_map && map != mb_map && map != buffer_map) - panic("kern_malloc_alloc: map != {kmem,mb,buffer}_map"); + if (map != kmem_map && map != mb_map) + panic("kern_malloc_alloc: map != {kmem,mb}_map"); size = round_page(size); addr = vm_map_min(map); if (vm_map_find(map, NULL, (vm_offset_t)0, &addr, size, TRUE) != KERN_SUCCESS) { - if (canwait) - panic("kmem_malloc: kmem_map too small"); - return(0); + if (canwait) { /* XXX -- then we should wait */ + if (map == kmem_map) + panic("kmem_malloc: kmem_map too small (should wait)"); + else if (map == mb_map) + panic("kmem_malloc: mb_map too small (should wait)"); + } + return 0; } /* @@ -576,6 +582,7 @@ void kmem_free_wakeup(map, addr, size) (void) vm_map_delete(map, trunc_page(addr), round_page(addr + size)); thread_wakeup((int)map); vm_map_unlock(map); + vm_map_simplify(map, addr); } /*