Subject: mb_map->lock.can_sleep
To: None <tech-kern@sun-lamp.cs.berkeley.edu>
From: Gordon W. Ross <gwr@jericho.mc.com>
List: tech-kern
Date: 05/01/1994 23:51:38
OK, I tried clearing lock.can_sleep for both mb_map and kmem_map
and now it doesn't panic, but it hangs.  I aborted it from the
PROM monitor and generated the stack trace below.

Here are the changes I made:  (Am I on the right track?)

*** kern/kern_malloc.c.~1~	Sun Dec 19 21:33:46 1993
--- kern/kern_malloc.c	Sun May  1 22:03:30 1994
***************
*** 249,254 ****
--- 249,256 ----
  		(vm_size_t)(npg * sizeof(struct kmemusage)));
  	kmem_map = kmem_suballoc(kernel_map, (vm_offset_t *)&kmembase,
  		(vm_offset_t *)&kmemlimit, (vm_size_t)(npg * NBPG), FALSE);
+ 	kmem_map->lock.can_sleep = FALSE;	/* XXX */
+ 
  #ifdef KMEMSTATS
  	for (indx = 0; indx < MINBUCKET + 16; indx++) {
  		if (1 << indx >= CLBYTES)

*** sun3/machdep.c.~3~	Thu Apr 28 23:26:38 1994
--- sun3/machdep.c	Sun May  1 21:52:56 1994
***************
*** 222,227 ****
--- 222,228 ----
      bzero(mclrefcnt, NMBCLUSTERS+CLBYTES/MCLBYTES);
      mb_map = kmem_suballoc(kernel_map, (vm_offset_t *)&mbutl, &maxaddr,
  			   VM_MBUF_SIZE, FALSE);
+ 	mb_map->lock.can_sleep = FALSE;	/* XXX */
  
      /*
       * Initialize callouts

... and here is the stack trace after aborting the hung kernel.
Gordon

Copyright (c) 1982,1986,1989,1991 The Regents of the University of California.
All rights reserved.

NetBSD 0.9a (POOH) #9: Sun May  1 22:04:33 EDT 1994
  gwr@pooh:/home/gwr/NetBSD-current/src/sys/arch/sun3.gwr/compile/POOH
Model: Sun 3/60
real mem  = 12533760
avail mem = 11141120
using 76 buffers containing 622592 bytes of memory
mainbus0 (root)
obio0 at mainbus0
le0 at obio0 addr 0x120000 level 3: ether address 08:00:20:00:4d:df
clock0 at obio0 addr 0x60000 level 5
obmem0 at mainbus0
obctl0 at mainbus0
idprom0 at obctl0 addr 0x0 size 0x20
prom0 at mainbus0
root on ffe5e7c:/home/roo/root
swap on ffe5d24:/home/roo/swap
~
Abort at 0E052154
>
Abort at 0FEF5870
>g4
Begin traceback...fp = FFE5270
Called from E065A82, fp=FFE527C, args=E06F138 FFE5358 FEF491C 4
Called from FEF491C, fp=FFE5358, args=4 FFFFE112 5DC 5
Called from FEF02B4, fp=FFE53D2, args=FFFFFFFF 1 0 5DC
Called from FEF5400, fp=FFE53EA, args=64 0 1 E31BB94
Called from FEF4988, fp=FFE54C2, args=1 5DC D 64
Called from FEF02B4, fp=FFE553C, args=FFFFE000 1 0 5DC

Called from E055D08, fp=FFE5560, args=E30FC04 2000 5DC E30FC00
	vm_map_find+28
Called from E055152, fp=FFE559C, args=E30FC00 0 0 FFE5594
	kmem_malloc+114
Called from E01A0F0, fp=FFE55C8, args=E30FC00 2000 0 0
	m_clalloc+56
Called from E05CE72, fp=FFE55FC, args=1 1 FFFFFFEE 4F2
	leget+442
Called from E05CC1C, fp=FFE562C, args=FD00C4A 5DC 0 E30FB24
	leread+256
Called from E05CABA, fp=FFE5654, args=0 FD00C3C 5DC 0
	lerint+308
Called from E05C848, fp=FFE5670, args=0 3 EA44000 E05C75C
	leintr+236
Called from E05FDFE, fp=FFE5690, args=0 EA46000 E30FC00 3
	intrhand+116
Called from E004856, fp=FFE56C6, args=2300 1 3 30000000
	level3intr+22
Called from E0568A6, fp=FFE56FA, args=E07EF38 EA44000 EA46000 2000
	vm_map_delete+278
Called from E0551D2, fp=FFE572A, args=E30FC00 EA44000 EA46000 1
	kmem_malloc+242
Called from E01A0F0, fp=FFE5756, args=E30FC00 2000 0 0
	m_clalloc+56
Called from E05CE72, fp=FFE578A, args=1 1 FFFFFFEE 4F2
	leget+442
Called from E05CC1C, fp=FFE57BA, args=FD00C4A 1DC 0 E30FB24
	leread+256
Called from E05CABA, fp=FFE57E2, args=0 FD00C3C 5DC 0
	lerint+308
Called from E05C848, fp=FFE57FE, args=0 3 64 E05C75C
	leintr+236
Called from E05FDFE, fp=FFE581E, args=0 0 E31B180 3
	intrhand+116
Called from E004856, fp=FFE5868, args=2300 E31B000 1 7
	level3intr+22
Called from E032ADE, fp=FFE58A8, args=E31B180 14 0 0
	ipintr+790
Called from E05FE56, fp=FFE58B0, args=FFE58F8 E0663B2 2304 0
	netintr+32
Called from E0663B2, fp=FFE58F8, args=2304 0 0 2004
	trap+850
Called from E004774, fp=FFE5972, args=9 0 0 20
	addupc+308
Called from E01D210, fp=FFE598A, args=E31B42C 18 E06D8E0 0
	sbwait+78
Called from E01BF50, fp=FFE59E6, args=E31B42C 0 68 2
	soreceive+702
Called from E043126, fp=FFE5A7E, args=E31B400 0 FFE5A5E FFE5AB2
	nfs_receive+1012
Called from E04354C, fp=FFE5ABA, args=E31B400 FFE5AAE FFE5AB2 E3135C0
	nfs_reply+80
Called from E043ABE, fp=FFE5B0A, args=E31B300 E3135C0 EA4343C C
	nfs_request+938
Called from E04B7B8, fp=FFE5B8A, args=E315000 E31B780 8 6
	nfs_readrpc+814
Called from E051226, fp=FFE5BE6, args=E315000 FFE5BBA E31BD80 2000
	nfs_doio+336
Called from E051058, fp=FFE5C0A, args=E50FB88 2000 0 E050FFE
	nfs_strategy+90
Called from E020F76, fp=FFE5C22, args=E50FB88 E315000 0 E50FB88
	bread+174
Called from E039FDC, fp=FFE5CDA, args=E315000 0 2000 E31BD80
	nfs_bioread+658
Called from E04B18E, fp=FFE5CF6, args=E315000 FFE5D22 8 E31BD80
	nfs_read+42
Called from E02864E, fp=FFE5D42, args=E315000 FFE5D22 8 E31BD80
	vn_rdwr+140
Called from E0087BA, fp=FFE5DA6, args=0 E315000 E313680 40
	check_exec+462
Called from E008A44, fp=FFE5F26, args=E30F800 FFE5EC4 C 0
	execve+228
Called from E0667A4, fp=FFE5FA2, args=E30F800 FFE5F6A FFE5F62 2000
	syscall+450
Called from E004C1E, fp=1BFFEC, args=3B 3B 3 2000
	trap0+20
End traceback...
>

------------------------------------------------------------------------------