Date: Thu, 16 Jan 1997 04:54:18 +1100 From: Bruce Evans <bde@zeta.org.au> To: bde@zeta.org.au, dg@root.com Cc: bugs@freebsd.org, dyson@freebsd.org, wollman@freebsd.org Subject: Re: malloc(..., M_WAITOK) found harmful Message-ID: <199701151754.EAA31434@godzilla.zeta.org.au>
next in thread | raw e-mail | index | archive | help
> 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);
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?199701151754.EAA31434>