[panic] _mtx_lock_sleep: recursed on non-recursive mutex emu10kx @ .../usr/src/sys/dev/sound/pci/emu10kx.c:620

From: Peter Kostouros <kpeter_at_melbpc.org.au>
Date: Sat, 07 Jul 2007 18:47:04 +1000
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 _at_ /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
_at__at_ -18,17 +18,15 _at__at_
 #
 # $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
_at__at_ -308,3 +306,32 _at__at_
 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
Received on Sat Jul 07 2007 - 07:16:11 UTC

This archive was generated by hypermail 2.4.0 : Wed May 19 2021 - 11:39:13 UTC