From owner-freebsd-bugs Wed Jan 15 09:56:45 1997 Return-Path: Received: (from root@localhost) by freefall.freebsd.org (8.8.4/8.8.4) id JAA13767 for bugs-outgoing; Wed, 15 Jan 1997 09:56:45 -0800 (PST) Received: from godzilla.zeta.org.au (godzilla.zeta.org.au [203.2.228.19]) by freefall.freebsd.org (8.8.4/8.8.4) with ESMTP id JAA13752; Wed, 15 Jan 1997 09:56:05 -0800 (PST) Received: (from bde@localhost) by godzilla.zeta.org.au (8.8.3/8.6.9) id EAA31434; Thu, 16 Jan 1997 04:54:18 +1100 Date: Thu, 16 Jan 1997 04:54:18 +1100 From: Bruce Evans Message-Id: <199701151754.EAA31434@godzilla.zeta.org.au> To: bde@zeta.org.au, dg@root.com Subject: Re: malloc(..., M_WAITOK) found harmful Cc: bugs@freebsd.org, dyson@freebsd.org, wollman@freebsd.org Sender: owner-bugs@freebsd.org X-Loop: FreeBSD.org Precedence: bulk > Arrg!!!! I didn't even know about "mcl_map". Okay, this is easy to fix - >mcl_map simply needs to be added to the list of maps in vm_map_entry_create. The maps are special-cased in too many other places. I added a check for mcl_map after all the relevant checks for mb_map in vm_map.c. It is also missing in vm_object.c. I think it is already handled right in vm_kern.c. Bruce diff -c2 vm_map.c~ vm_map.c *** vm_map.c~ Wed Jan 15 04:50:05 1997 --- vm_map.c Thu Jan 16 04:03:39 1997 *************** *** 333,338 **** int s; ! if (map == kernel_map || map == kmem_map || ! map == mb_map || map == pager_map) { s = splvm(); entry->next = kentry_free; --- 331,336 ---- int s; ! if (map == kernel_map || map == kmem_map || map == mb_map || ! map == mcl_map || map == pager_map) { s = splvm(); entry->next = kentry_free; *************** *** 371,375 **** m = vm_page_alloc(kernel_object, OFF_TO_IDX(mapvm - VM_MIN_KERNEL_ADDRESS), ! (map == kmem_map || map == mb_map) ? VM_ALLOC_INTERRUPT : VM_ALLOC_NORMAL); if (m) { --- 369,375 ---- m = vm_page_alloc(kernel_object, OFF_TO_IDX(mapvm - VM_MIN_KERNEL_ADDRESS), ! (map == kmem_map || map == mb_map || ! map == mcl_map) ? ! VM_ALLOC_INTERRUPT : VM_ALLOC_NORMAL); if (m) { *************** *** 396,401 **** } ! if (map == kernel_map || map == kmem_map || ! map == mb_map || map == pager_map) { s = splvm(); entry = kentry_free; --- 396,401 ---- } ! if (map == kernel_map || map == kmem_map || map == mb_map || ! map == mcl_map || map == pager_map) { s = splvm(); entry = kentry_free; *************** *** 824,828 **** start = *addr; ! if (map == kmem_map || map == mb_map) s = splvm(); --- 824,828 ---- start = *addr; ! if (map == kmem_map || map == mb_map || map == mcl_map) s = splvm(); *************** *** 831,835 **** if (vm_map_findspace(map, start, length, addr)) { vm_map_unlock(map); ! if (map == kmem_map || map == mb_map) splx(s); return (KERN_NO_SPACE); --- 831,835 ---- if (vm_map_findspace(map, start, length, addr)) { vm_map_unlock(map); ! if (map == kmem_map || map == mb_map || map == mcl_map) splx(s); return (KERN_NO_SPACE); *************** *** 841,845 **** vm_map_unlock(map); ! if (map == kmem_map || map == mb_map) splx(s); --- 841,845 ---- vm_map_unlock(map); ! if (map == kmem_map || map == mb_map || map == mcl_map) splx(s); *************** *** 1975,1979 **** register int result, s = 0; ! if (map == kmem_map || map == mb_map) s = splvm(); --- 1975,1979 ---- register int result, s = 0; ! if (map == kmem_map || map == mb_map || map == mcl_map) s = splvm(); *************** *** 1983,1987 **** vm_map_unlock(map); ! if (map == kmem_map || map == mb_map) splx(s); --- 1983,1987 ---- vm_map_unlock(map); ! if (map == kmem_map || map == mb_map || map == mcl_map) splx(s);