blockable sleep lock (sleep mutex) 16

Nikola Knežević laladelausanne at gmail.com
Fri Jan 30 09:11:58 PST 2009


Hi,

I'm trying to port Click modular router to FreeBSD 7.1, but with a  
twist. Instead of letting Click run in netisr (as it used to run in  
FreeBSD 4), I want to have it running in a kthread. I managed to get  
it running this way, but when I turn on INVARIANTS and WITNESS (along  
with WITNESS_SKIPSPIN), I get coredumps when I'm trying to install a  
new configuration...

Here is the trace:
---8<---
(kgdb) bt
#0  doadump () at pcpu.h:195
#1  0xffffffff8049ef98 in boot (howto=260) at /usr/src/sys/kern/ 
kern_shutdown.c:418
#2  0xffffffff8049f429 in panic (fmt=Variable "fmt" is not available.
) at /usr/src/sys/kern/kern_shutdown.c:574
#3  0xffffffff804d941c in witness_checkorder (lock=0xffffff0007fdfc50,  
flags=Variable "flags" is not available.
) at /usr/src/sys/kern/subr_witness.c:877
#4  0xffffffff80493769 in _mtx_lock_flags (m=0xffffff0007fdfc50,  
opts=0, file=0xffffffff8085536f "/usr/src/sys/vm/uma_core.c",
     line=1834) at /usr/src/sys/kern/kern_mutex.c:183
#5  0xffffffff806a6aab in uma_zalloc_arg (zone=0xffffff0007fde9c0,  
udata=0x0, flags=2) at /usr/src/sys/vm/uma_core.c:1834
#6  0xffffffff804908c6 in malloc (size=Variable "size" is not available.
) at uma.h:277
#7  0xffffffff877579bd in operator new[] (sz=Variable "sz" is not  
available.
) at /home/knl/work/mx/click/bsdmodule/..//lib/glue.cc:285
#8  0xffffffff877856d3 in ?? ()
#9  0xffffffff8785d540 in ?? ()
#10 0xffffffff8785d610 in ?? ()
#11 0x0000000000000000 in ?? ()
#12 0xffffff0001353300 in ?? ()
#13 0xffffffff8785d580 in ?? ()
#14 0xffffffff87777afa in Click::ClickInstance::element_hindexes  
(this=0x4, result=@0xffffffff8785d610) at vector.hh:96
Previous frame identical to this frame (corrupt stack?)
--->8---

This is the message buffer:
Unread portion of the kernel message buffer:
panic: blockable sleep lock (sleep mutex) 16 @ /usr/src/sys/vm/ 
uma_core.c:1834
cpuid = 0
Uptime: 24m35s
Physical memory: 114 MB
Dumping 42 MB: 27 11


Any hints where I should search for the cause?

I'm using MTX_DEF mutexes to protect data structures. Click exports  
its own FS, where each element (part of the router) has its own files.  
Each file has coresponding function which is responsible for input/ 
output of the data. So, when I want to create a new router, I write to  
file named "config". Then, function named write_config takes over,  
starts the Lexer, which in turns produces elements, which then export  
their representations in the VFS. All of this happens in the  
clickfs_close (creation starts when file is closed).

If I read the code correctly, vn_closefile locks the Giant, so that  
may cause problems...

Cheers,
N.


More information about the freebsd-hackers mailing list