Kernel panic of "spin lock held too long"
KGB
380008156 at qq.com
Thu Jun 24 11:41:18 UTC 2010
Hi All:
I am writing a driver module (named tej21.ko) under freebsd8-release(i386) and I had a problem of the kernel panic "spin lock held too long".
When I kldload my driver module without smp support (kern.smp.disabled = 1),every thing is OK.
But when I support the smp ,I met the problem 'Kernel panic of "spin lock held too long" '.
My Hardware :
1.CPU: Pentium(R) Dual-Core CPU E5200 @ 2.50GHz (2499.95-MHz 686-class CPU)
Software:
freeBSD 8 release i386.
The dump message is below.Why is there this problem,can someone give me advice?
/*------------------------------dump message ----------------------------------------------*/
Unread portion of the kernel message buffer:
spin lock 0xc0d9e580 (sched lock 1) held by 0xc5546b40 (tid 100003) too long
panic: spin lock held too long
cpuid = 0
Uptime: 53m58s
Physical memory: 2034 MB
Dumping 113 MB: 98 82 66 50 34 18 2
#0 doadump () at pcpu.h:246
246 pcpu.h: No such file or directory.
in pcpu.h
(kgdb) #0 doadump () at pcpu.h:246
#1 0xc087cf67 in boot (howto=260) at /usr/src/sys/kern/kern_shutdown.c:416
#2 0xc087d259 in panic (fmt=Variable "fmt" is not available.
) at /usr/src/sys/kern/kern_shutdown.c:579
#3 0xc086d50f in _mtx_lock_spin_failed (m=0x0)
at /usr/src/sys/kern/kern_mutex.c:490
#4 0xc086d595 in _mtx_lock_spin (m=0xc0d9e580, tid=3338365760, opts=0,
file=0x0, line=0) at /usr/src/sys/kern/kern_mutex.c:526
#5 0xc089edf8 in sched_add (td=0xc5546b40, flags=0)
at /usr/src/sys/kern/sched_ule.c:1109
#6 0xc08b6dc4 in turnstile_unpend (ts=0xc5526d80, owner_type=0)
at /usr/src/sys/kern/subr_turnstile.c:931
#7 0xc086d4b1 in _mtx_unlock_sleep (m=0xc5ecc210, opts=0,
file=0xc5db630a "zaptel-base.c", line=4251)
at /usr/src/sys/kern/kern_mutex.c:684
#8 0xc086d97f in _mtx_unlock_flags (m=0xc5ecc210, opts=0,
file=0xc5db630a "zaptel-base.c", line=4251)
at /usr/src/sys/kern/kern_mutex.c:227
#9 0xc5daf24a in zt_chanandpseudo_ioctl () from /boot/kernel/zaptel.ko
#10 0xc5db15a8 in zt_chan_ioctl () from /boot/kernel/zaptel.ko
#11 0xc5db2ffb in zt_ioctl () from /boot/kernel/zaptel.ko
#12 0xc0804627 in devfs_ioctl_f (fp=0xc5990b28, com=2147764739,
data=0xc57487c0, cred=0xc5974680, td=0xc6fb6b40)
at /usr/src/sys/fs/devfs/devfs_vnops.c:659
#13 0xc08b8e00 in kern_ioctl (td=0xc6fb6b40, fd=49, com=2147764739,
data=0xc57487c0 "\003") at file.h:262
#14 0xc08b8f74 in ioctl (td=0xc6fb6b40, uap=0xe7d15cf8)
at /usr/src/sys/kern/sys_generic.c:678
#15 0xc0baec15 in syscall (frame=0xe7d15d38)
at /usr/src/sys/i386/i386/trap.c:1073
#16 0xc0b91b10 in Xint0x80_syscall ()
at /usr/src/sys/i386/i386/exception.s:261
#17 0x00000033 in ?? ()
Previous frame inner to this frame (corrupt stack?)
(kgdb)
------------------------------------------------------------------------
ps -axl
UID PID PPID CPU PRI NI VSZ RSS MWCHAN STAT TT TIME COMMAND
0 0 0 0 8 0 0 0 - DLs ?? 398849:21.00 [kernel]
0 1 0 0 44 0 2912 0 wait DLs ?? 184924:18.00 [init]
0 2 0 0 -8 0 0 0 - DL ?? 1347143:28.00 [g_event]
0 3 0 0 -8 0 0 0 - DL ?? 3971702:42.00 [g_up]
0 4 0 0 -8 0 0 0 - DL ?? 3522203:58.00 [g_down]
0 5 0 0 -16 0 0 0 ccb_sc DL ?? 0:00.00 [xpt_thrd]
0 6 0 0 -16 0 0 0 waitin DL ?? 572:43.00 [sctp_itera
0 7 0 0 -16 0 0 0 psleep DL ?? 30694:50.00 [pagedaemon
0 8 0 0 -16 0 0 0 psleep DL ?? 115:00.00 [vmdaemon]
0 9 0 0 76 0 0 0 pgzero DL ?? 507:54.00 [pagezero]
0 10 0 0 -16 0 0 0 audit_ DL ?? 0:00.00 [audit]
0 11 0 0 171 0 0 0 - RL ?? 31586334:44.00 [idle]
0 12 0 0 -60 0 0 0 - WL ?? 27177636:53.00 [intr]
0 13 0 0 -16 0 0 0 - DL ?? 1323574:06.00 [yarrow]
0 14 0 0 -64 0 0 0 - DL ?? 1802002:14.00 [usb]
0 15 0 0 -16 0 0 0 psleep DL ?? 123208:59.00 [bufdaemon]
0 16 0 0 44 0 0 0 syncer DL ?? 860100:54.00 [syncer]
0 17 0 0 -16 0 0 0 vlruwt DL ?? 125741:10.00 [vnlru]
0 18 0 0 -16 0 0 0 sdflus DL ?? 164521:57.00 [softdepflu
0 19 0 0 -16 0 0 0 flowcl DL ?? 33840:21.00 [flowcleane
0 91 1 0 76 0 1536 0 pause Ds ?? 12260:50.00 [adjkerntz]
0 422 1 0 52 0 3448 0 select Ds ?? 10960:01.00 [moused]
0 439 1 0 44 0 1888 0 select Ds ?? 33899288:23.55 [devd]
0 554 1 0 44 0 3344 0 select Ds ?? 461564:12.00 [syslogd]
0 780 1 0 76 0 6676 0 select Ds ?? 38875:38.00 [sshd]
0 791 1 0 44 0 3372 0 nanslp Ds ?? 151384:31.00 [cron]
0 841 1 0 49 0 3808 0 wait Ds ?? 647237:44.00 [login]
0 843 1 0 76 0 3344 0 ttyin Ds+ ?? 68329:49.00 [getty]
0 844 1 0 76 0 3344 0 ttyin Ds+ ?? 68511:27.00 [getty]
0 845 1 0 76 0 3344 0 ttyin Ds+ ?? 69227:17.00 [getty]
0 846 1 0 76 0 3344 0 ttyin Ds+ ?? 69149:10.00 [getty]
0 847 1 0 76 0 3344 0 ttyin Ds+ ?? 67001:40.00 [getty]
0 848 1 0 76 0 3344 0 ttyin Ds+ ?? 69030:36.00 [getty]
0 857 841 0 51 0 5648 0 pause D ?? 1222986:25.00 [csh]
0 900 857 0 44 0 63748 0 - R+ ?? 11943454:14.00 [asterisk]
0 920 1 0 44 0 3344 0 ttyin Ds+ ?? 72922:55.00 [getty]
(kgdb) info threads
19 Thread 100023 (PID=12: intr/swi5: +) sched_switch (td=0xc5699000,
newtd=0xc6fb6b40, flags=265) at /usr/src/sys/kern/sched_ule.c:1864
18 Thread 100022 (PID=12: intr/swi2: cambio) fork_trampoline ()
at /usr/src/sys/i386/i386/exception.s:267
17 Thread 100016 (PID=12: intr/swi6: task queue) sched_switch (
td=0xc5548480, newtd=0xc5998d80, flags=265)
at /usr/src/sys/kern/sched_ule.c:1864
16 Thread 100015 (PID=12: intr/swi6: Giant taskq) sched_switch (
td=0xc55486c0, newtd=0xc5546b40, flags=265)
at /usr/src/sys/kern/sched_ule.c:1864
15 Thread 100008 (PID=12: intr/swi4: clock) sched_switch (td=0xc5546000,
newtd=0xc5546b40, flags=265) at /usr/src/sys/kern/sched_ule.c:1864
14 Thread 100007 (PID=12: intr/swi4: clock) sched_switch (td=0xc5546240,
newtd=0xc5546900, flags=265) at /usr/src/sys/kern/sched_ule.c:1864
13 Thread 100006 (PID=12: intr/swi3: vm) fork_trampoline ()
at /usr/src/sys/i386/i386/exception.s:267
12 Thread 100005 (PID=12: intr/swi1: netisr 0) sched_switch (td=0xc55466c0,
newtd=0xc5546b40, flags=265) at /usr/src/sys/kern/sched_ule.c:1864
11 Thread 100004 (PID=11: idle/idle: cpu0) sched_switch (td=0xc5546900,
newtd=0xc6fb6b40, flags=1548) at /usr/src/sys/kern/sched_ule.c:1864
10 Thread 100003 (PID=11: idle/idle: cpu1) sched_switch (td=0xc5546b40,
newtd=0xc5998d80, flags=6) at /usr/src/sys/kern/sched_ule.c:1864
9 Thread 100002 (PID=1: init) sched_switch (td=0xc5546d80,
newtd=0xc5546b40, flags=260) at /usr/src/sys/kern/sched_ule.c:1864
8 Thread 100001 (PID=10: audit) sched_switch (td=0xc5548000,
newtd=0xc55cc480, flags=260) at /usr/src/sys/kern/sched_ule.c:1864
7 Thread 100020 (PID=0: kernel/kqueue taskq) sched_switch (td=0xc56996c0,
newtd=0xc5546900, flags=260) at /usr/src/sys/kern/sched_ule.c:1864
6 Thread 100019 (PID=0: kernel/acpi_task_2) sched_switch (td=0xc5699900,
newtd=0xc56996c0, flags=260) at /usr/src/sys/kern/sched_ule.c:1864
5 Thread 100018 (PID=0: kernel/acpi_task_1) sched_switch (td=0xc5699b40,
newtd=0xc5699900, flags=260) at /usr/src/sys/kern/sched_ule.c:1864
4 Thread 100017 (PID=0: kernel/acpi_task_0) sched_switch (td=0xc5548240,
newtd=0xc5699b40, flags=260) at /usr/src/sys/kern/sched_ule.c:1864
3 Thread 100014 (PID=0: kernel/thread taskq) sched_switch (td=0xc5548900,
newtd=0xc0d98150, flags=260) at /usr/src/sys/kern/sched_ule.c:1864
2 Thread 100012 (PID=0: kernel/firmware taskq) sched_switch (td=0xc5548d80,
newtd=0xc5546b40, flags=260) at /usr/src/sys/kern/sched_ule.c:1864
1 Thread 100000 (PID=0: kernel/swapper) sched_switch (td=0xc0d98150,
newtd=0xc5546900, flags=260) at /usr/src/sys/kern/sched_ule.c:1864
More information about the freebsd-drivers
mailing list