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