calling soo_write() from itimer handler

Beesdeckar <[email protected]>
Newsgroups gmane.os.netbsd.devel.kernel
Organization Soft in Engines
Message-ID <[email protected]>
Hello,

I have kernel 10.1 rebuilt with DEBUG LOCKDEBUG and DIAGNOSTIC flags to 
test my kernel module.

Kernel module contains one second periodic timer (itimer_init() 
itimer_set()...) and it's timer handler calls soo_write().
soo_write() send several bytes of data received in user mode.

When used release kernel 10.1 then it runs and soo_write() does its work 
fine. In my debug version of kernel compiled with above flags it stops 
on assert_sleepable(), stack is added below.

My questions are:
If soo_write() cannot be called from software interrupt what should I 
change  to call soo_write() on kernel timer tick ?
and
What can be danger if I ignore it in release version of kernel ?
and
Can I disable only this one check with some runtime kernel flag when 
used my custom built kernel ?


3  0xffffffff80e3b417 in panic (fmt=fmt@entry=0xffffffff816cb9d8 "%s: %s 
caller=%p") at /usr/src/sys/kern/subr_prf.c:208
#4  0xffffffff80dd9ce8 in assert_sleepable () at 
/usr/src/sys/kern/kern_lock.c:106
#5  0xffffffff80e382a1 in pool_cache_get_paddr (pc=0xfffff1afc9228040, 
flags=flags@entry=257, pap=pap@entry=0x0 <pslist_reader_first>)
     at /usr/src/sys/kern/subr_pool.c:2722
#6  0xffffffff80e70c64 in m_get (how=how@entry=0, type=type@entry=1) at 
/usr/src/sys/kern/uipc_mbuf.c:538
#7  0xffffffff80e70d7c in m_gethdr (how=how@entry=0, type=type@entry=1) 
at /usr/src/sys/kern/uipc_mbuf.c:567
#8  0xffffffff80e7bda9 in sosend (so=0xfffff1ae189a1978, addr=0x0 
<pslist_reader_first>, uio=0xffffc70384d88e68, top=<optimized out>,
     control=0x0 <pslist_reader_first>, flags=0, l=0xfffff1adc465b340) 
at /usr/src/sys/kern/uipc_socket.c:1004
#9  0xffffffff80e5ba19 in soo_write (fp=<optimized out>, 
offset=<optimized out>, uio=<optimized out>, cred=<optimized out>, 
flags=<optimized out>)
     at /usr/src/sys/kern/sys_socket.c:119
#10 0xffffffff8200222f in SendMsgToUser ()
#11 0xffffffff82004849 in MySetSyncUserObject ()
#12 0xffffffff820162b1 in MyCounterTimer ()
#13 0xffffffff82004a53 in NetBSDTimerHandler ()
#14 0xffffffff80e0d60f in itimer_callout (arg=0xfffff1addffe6a38) at 
/usr/src/sys/kern/kern_time.c:843
#15 0xffffffff80e10642 in callout_softclock (v=<optimized out>) at 
/usr/src/sys/kern/kern_timeout.c:861
#16 0xffffffff80dffa9d in softint_execute (s=2, l=0xfffff1adc465b340) at 
/usr/src/sys/kern/kern_softint.c:597
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.