Date: Sat, 07 Jul 2007 18:47:04 +1000 From: Peter Kostouros <kpeter@melbpc.org.au> To: freebsd-current@FreeBSD.ORG Subject: [panic] _mtx_lock_sleep: recursed on non-recursive mutex emu10kx @ .../usr/src/sys/dev/sound/pci/emu10kx.c:620 Message-ID: <468F5308.6060309@melbpc.org.au>
next in thread | raw e-mail | index | archive | help
Hi I have experienced intermittent _mtx_lock_sleep raised panics from CURRENT kernels dated 23JUN2007 and 30JUN2007. I have a core dump and hope the attached gdb session is of use to anyone. Please let me know if I can provide further information. -- Regards Peter As always the organisation disavows knowledge of this email Script started on Sat Jul 7 18:12:23 2007 baron# exitkgdb -c vmcore.162 -f /boot/kernel/kernel [GDB will not be able to debug user-mode threads: /usr/lib/libthread_db.so: Undefined symbol "ps_pglobal_lookup"] GNU gdb 6.1.1 [FreeBSD] Copyright 2004 Free Software Foundation, Inc. GDB is free software, covered by the GNU General Public License, and you are welcome to change it and/or distribute copies of it under certain conditions. Type "show copying" to see the conditions. There is absolutely no warranty for GDB. Type "show warranty" for details. This GDB was configured as "i386-marcel-freebsd". Unread portion of the kernel message buffer: panic: _mtx_lock_sleep: recursed on non-recursive mutex emu10kx @ /mnt/cvs/FreeBSD/usr/src/sys/dev/sound/pci/emu10kx.c:620 cpuid = 0 Uptime: 3h16m48s Physical memory: 1011 MB Dumping 174 MB: 159 143 127 111 95 79 63 47 31 15 #0 doadump () at pcpu.h:195 195 pcpu.h: No such file or directory. in pcpu.h (kgdb) where #0 doadump () at pcpu.h:195 #1 0xc079379e in boot (howto=260) at /mnt/cvs/FreeBSD/usr/src/sys/kern/kern_shutdown.c:409 #2 0xc0793a60 in panic (fmt=Variable "fmt" is not available. ) at /mnt/cvs/FreeBSD/usr/src/sys/kern/kern_shutdown.c:563 #3 0xc0787e97 in _mtx_lock_sleep (m=0xc4163018, tid=3300537952, opts=0, file=0xc0ad01c9 "/mnt/cvs/FreeBSD/usr/src/sys/dev/sound/pci/emu10kx.c", line=620) at /mnt/cvs/FreeBSD/usr/src/sys/kern/kern_mutex.c:311 #4 0xc07880cf in _mtx_lock_flags (m=0xc4163018, opts=0, file=0xc0ad01c9 "/mnt/cvs/FreeBSD/usr/src/sys/dev/sound/pci/emu10kx.c", line=620) at /mnt/cvs/FreeBSD/usr/src/sys/kern/kern_mutex.c:187 #5 0xc0679945 in emu_wrptr (sc=0xc4163000, chn=3, reg=25, data=65535) at /mnt/cvs/FreeBSD/usr/src/sys/dev/sound/pci/emu10kx.c:620 #6 0xc067a452 in emu_vtrigger (sc=0xc4163000, v=0xc4163380, go=0) at /mnt/cvs/FreeBSD/usr/src/sys/dev/sound/pci/emu10kx.c:1399 #7 0xc067a506 in emu_vtrigger (sc=0xc4163000, v=0xc4163354, go=0) at /mnt/cvs/FreeBSD/usr/src/sys/dev/sound/pci/emu10kx.c:1406 #8 0xc06800a3 in emupchan_trigger (obj=0xc415ec00, c_devinfo=0xc4002038, go=-1) at /mnt/cvs/FreeBSD/usr/src/sys/dev/sound/pci/emu10kx-pcm.c:532 #9 0xc068611b in chn_trigger (c=0xc407db00, go=-1) at channel_if.h:144 #10 0xc0687d1e in chn_flush (c=0xc407db00) at /mnt/cvs/FreeBSD/usr/src/sys/dev/sound/pcm/channel.c:868 #11 0xc0689d1c in dsp_close (i_dev=0xc4adc800, flags=2, mode=8192, td=0xc4ba3660) at /mnt/cvs/FreeBSD/usr/src/sys/dev/sound/pcm/dsp.c:643 #12 0xc072c5c6 in devfs_close (ap=0xe6a29b40) at /mnt/cvs/FreeBSD/usr/src/sys/fs/devfs/devfs_vnops.c:366 #13 0xc0a60145 in VOP_CLOSE_APV (vop=0xc0b98580, a=0xe6a29b40) at vnode_if.c:424 #14 0xc0821de1 in vn_close (vp=0xc4cc4110, flags=2, file_cred=0xc509ad00, td=0xc4ba3660) at vnode_if.h:228 #15 0xc0821ef4 in vn_closefile (fp=0xc50b44c8, td=0xc4ba3660) at /mnt/cvs/FreeBSD/usr/src/sys/kern/vfs_vnops.c:868 #16 0xc0729d79 in devfs_close_f (fp=0xc50b44c8, td=0xc4ba3660) at /mnt/cvs/FreeBSD/usr/src/sys/fs/devfs/devfs_vnops.c:381 #17 0xc0769092 in fdrop (fp=0xc50b44c8, td=0xc4ba3660) at file.h:297 #18 0xc076a64f in closef (fp=0xc50b44c8, td=0xc4ba3660) at /mnt/cvs/FreeBSD/usr/src/sys/kern/kern_descrip.c:1924 #19 0xc076a9fc in kern_close (td=0xc4ba3660, fd=17) at /mnt/cvs/FreeBSD/usr/src/sys/kern/kern_descrip.c:1020 #20 0xc076aa8a in close (td=0xc4ba3660, uap=0xe6a29cfc) at /mnt/cvs/FreeBSD/usr/src/sys/kern/kern_descrip.c:972 #21 0xc0a4a2f3 in syscall (frame=0xe6a29d38) at /mnt/cvs/FreeBSD/usr/src/sys/i386/i386/trap.c:1006 #22 0xc0a30ba0 in Xint0x80_syscall () at /mnt/cvs/FreeBSD/usr/src/sys/i386/i386/exception.s:196 #23 0x00000033 in ?? () Previous frame inner to this frame (corrupt stack?) (kgdb) up 7 #7 0xc067a506 in emu_vtrigger (sc=0xc4163000, v=0xc4163354, go=0) at /mnt/cvs/FreeBSD/usr/src/sys/dev/sound/pci/emu10kx.c:1406 /mnt/cvs/FreeBSD/usr/src/sys/dev/sound/pci/emu10kx.c:1406:39441:beg:0xc067a506 (kgdb) l 1401 emu_wrptr(sc, v->vnum, CVCF, 0x0000ffff); 1402 emu_wrptr(sc, v->vnum, IP, 0); 1403 emu_vstop(sc, v->vnum, 1); 1404 } 1405 if ((v->stereo) && (v->slave != NULL)) 1406 emu_vtrigger(sc, v->slave, go); 1407 } 1408 1409 int 1410 emu_vpos(struct emu_sc_info *sc, struct emu_voice *v) (kgdb) down 1 #6 0xc067a452 in emu_vtrigger (sc=0xc4163000, v=0xc4163380, go=0) at /mnt/cvs/FreeBSD/usr/src/sys/dev/sound/pci/emu10kx.c:1399 /mnt/cvs/FreeBSD/usr/src/sys/dev/sound/pci/emu10kx.c:1399:39207:beg:0xc067a452 (kgdb) l 1394 emu_wrptr(sc, v->vnum, CPF_CURRENTPITCH, pitch_target); 1395 emu_wrptr(sc, v->vnum, IP, initial_pitch); 1396 } else { 1397 emu_wrptr(sc, v->vnum, PTRX_PITCHTARGET, 0); 1398 emu_wrptr(sc, v->vnum, CPF_CURRENTPITCH, 0); 1399 emu_wrptr(sc, v->vnum, IFATN, 0xffff); 1400 emu_wrptr(sc, v->vnum, VTFT, 0x0000ffff); 1401 emu_wrptr(sc, v->vnum, CVCF, 0x0000ffff); 1402 emu_wrptr(sc, v->vnum, IP, 0); 1403 emu_vstop(sc, v->vnum, 1); (kgdb) down 1 #5 0xc0679945 in emu_wrptr (sc=0xc4163000, chn=3, reg=25, data=65535) at /mnt/cvs/FreeBSD/usr/src/sys/dev/sound/pci/emu10kx.c:620 /mnt/cvs/FreeBSD/usr/src/sys/dev/sound/pci/emu10kx.c:620:19715:beg:0xc0679945 (kgdb) l 615 void 616 emu_wrptr(struct emu_sc_info *sc, unsigned int chn, unsigned int reg, uint32_t data) 617 { 618 uint32_t ptr, mask, size, offset; 619 ptr = ((reg << 16) & sc->address_mask) | (chn & PTR_CHANNELNUM_MASK); 620 mtx_lock(&sc->rw); 621 emu_wr_nolock(sc, PTR, ptr, 4); 622 /* 623 * XXX Another kind of magic encoding in register number. This can 624 * give you side effect - it will read previous data from register (kgdb) p sc->rw $1 = {lock_object = {lo_name = 0xc0ad0b8f "emu10kx", lo_type = 0xc0ad0544 "atomic op", lo_flags = 16973824, lo_witness_data = { lod_list = {stqe_next = 0xc0c15bb0}, lod_witness = 0xc0c15bb0}}, mtx_lock = 3300537954, mtx_recurse = 255} (kgdb) quit baron# exit exit Script done on Sat Jul 7 18:15:55 2007 *** Kernel config file diff --- GENERIC 2007-06-23 09:18:01.000000000 +1000 +++ BARON 2007-06-30 10:10:57.000000000 +1000 @@ -18,17 +18,15 @@ # # $FreeBSD: src/sys/i386/conf/GENERIC,v 1.472 2007/06/14 17:14:26 delphij Exp $ -cpu I486_CPU -cpu I586_CPU cpu I686_CPU -ident GENERIC +ident BARON # To statically compile in device wiring instead of /boot/device.hints #hints "GENERIC.hints" # Default places to look for devices. makeoptions DEBUG=-g # Build kernel with gdb(1) debug symbols -options SCHED_4BSD # 4BSD scheduler +options SCHED_ULE # 4BSD scheduler options PREEMPTION # Enable kernel thread preemption options INET # InterNETworking options INET6 # IPv6 communications protocols @@ -308,3 +306,32 @@ device fwip # IP over FireWire (RFC 2734,3146) device dcons # Dumb console driver device dcons_crom # Configuration ROM for dcons + +# BARON + +device sound +device snd_emu10kx + +options P1003_1B_MQUEUE + +options ALTQ +options ALTQ_CBQ +options ALTQ_RED +options ALTQ_RIO +options ALTQ_HFSC +options ALTQ_CDNR +options ALTQ_PRIQ +options ALTQ_NOPCC +options ALTQ_DEBUG + +# +# Options to enable ATAPI devices access through SCSI subsystem +# +device atapicam +device ata +device scbus +device cd +device pass + +device iicbus +device iicbb
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?468F5308.6060309>