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>
