Skip site navigation (1)Skip section navigation (2)
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>