On Thursday 06 April 2006 14:14, Ulrich Spoerlein wrote:
> Hello,
>
> I almost always get a panic when running kismet on my ipw-Interface
> under 6.1-PRERELEASE. This has been the case ever since ipw hit the
> tree. Sometimes kismet works, sometimes it doesn't. A sure way to
> trigger the panic is to switch between bss/ibss/monitor mode prior to
> running kismet. Perhaps there is a bug in the re-initialization when
> loading a different firmware?
>
> Is this panic known? Does the new firmware-framework address this?

The trace below seems unrelated to firmware loading, but there have been some 
problems with firmware loading before and we hope to improve things with the 
new firmware framework.

Could you try the attached patch, please?  This is something I did for iwi and 
just moved the general idea over without testing or close evaluation.  So be 
aware and let me know either way.  Thanks.

> ipw0: <Intel(R) PRO/Wireless 2100 MiniPCI> mem 0xfaffc000-0xfaffcfff irq 9
> at device 3.0 on pci2 ...
> panic: mutex ipw0 recursed at /usr/src/sys/kern/kern_synch.c:177
> KDB: enter: panic
> [thread pid 1527 tid 100119 ]
> Stopped at      kdb_enter+0x2b: nop
> db> tr
> Tracing pid 1527 tid 100119 td 0xc5cca300
> kdb_enter(c06d3e90) at kdb_enter+0x2b
> panic(c06d332c,c4c5d600,c06d4661,b1,0) at panic+0xbb
> _mtx_assert(c4d3cc74,9,c06d4661,b1,0) at _mtx_assert+0x83
> msleep(c4d3c000,c4d3cc74,0,c0912121,3e8) at msleep+0x16a
> ipw_init(c4d3c000,c4d3c000,2080,c4d3c904,c4c2dc00) at ipw_init+0xb63
> ipw_media_change(c4c2dc00,c4f6fd00,80,c4d36600,0) at ipw_media_change+0x8b
> ifmedia_ioctl(c4c2dc00,c4d9a360,c4d3c904,c0206937,0) at ifmedia_ioctl+0x93
> ieee80211_ioctl(c4d3c004,c0206937,c4d9a360,c4d3cc74,c4d3c000) at
> ieee80211_ioctl+0xc1
> ipw_ioctl(c4c2dc00,c0206937,c4d9a360,ef577c38,c051bbee) at ipw_ioctl+0x5c
> ifhwioctl(c0206937,c4c2dc00,c4d9a360,c5cca300,c074a4c0) at ifhwioctl+0x9ac
> ifioctl(c5a4f858,c0206937,c4d9a360,c5cca300,0) at ifioctl+0xc3
> soo_ioctl(c59c0750,c0206937,c4d9a360,c5a41a80,c5cca300) at soo_ioctl+0x2db
> ioctl(c5cca300,ef577d04,3,2,282) at ioctl+0x370
> syscall(3b,3b,3b,bfbf90a0,80dc400) at syscall+0x22f
> Xint0x80_syscall() at Xint0x80_syscall+0x1f
> --- syscall (54, FreeBSD ELF32, ioctl), eip = 0x482d468f, esp = 0xbfbf906c,
> ebp = 0xbfbf90e8 ---
>
>
> Ulrich Spoerlein

-- 
/"\  Best regards,                      | [EMAIL PROTECTED]
\ /  Max Laier                          | ICQ #67774661
 X   http://pf4freebsd.love2party.net/  | [EMAIL PROTECTED]
/ \  ASCII Ribbon Campaign              | Against HTML Mail and News
Index: if_ipw.c
===================================================================
RCS file: /usr/store/mlaier/fcvs/src/sys/dev/ipw/if_ipw.c,v
retrieving revision 1.7.2.4
diff -u -r1.7.2.4 if_ipw.c
--- if_ipw.c	29 Jan 2006 15:13:01 -0000	1.7.2.4
+++ if_ipw.c	7 Apr 2006 22:27:33 -0000
@@ -220,7 +220,7 @@
 	sc->sc_dev = dev;
 
 	mtx_init(&sc->sc_mtx, device_get_nameunit(dev), MTX_NETWORK_LOCK,
-	    MTX_DEF | MTX_RECURSE);
+	    MTX_DEF);
 
 	if (pci_get_powerstate(dev) != PCI_POWERSTATE_D0) {
 		device_printf(dev, "chip is in D%d power mode "
@@ -380,6 +380,7 @@
 	struct ipw_softc *sc = device_get_softc(dev);
 	struct ieee80211com *ic = &sc->sc_ic;
 	struct ifnet *ifp = ic->ic_ifp;
+	IPW_LOCK_DECL;
 
 	IPW_LOCK(sc);
 
@@ -722,6 +723,7 @@
 {
 	struct ipw_softc *sc = device_get_softc(dev);
 	struct ifnet *ifp = sc->sc_ic.ic_ifp;
+	IPW_LOCK_DECL;
 
 	IPW_LOCK(sc);
 
@@ -743,6 +745,7 @@
 {
 	struct ipw_softc *sc = ifp->if_softc;
 	int error;
+	IPW_LOCK_DECL;
 
 	IPW_LOCK(sc);
 
@@ -1222,6 +1225,7 @@
 {
 	struct ipw_softc *sc = arg;
 	uint32_t r;
+	IPW_LOCK_DECL;
 
 	IPW_LOCK(sc);
 
@@ -1474,6 +1478,7 @@
 	struct mbuf *m0;
 	struct ether_header *eh;
 	struct ieee80211_node *ni;
+	IPW_LOCK_DECL;
 
 	IPW_LOCK(sc);
 
@@ -1557,6 +1562,7 @@
 	struct ieee80211com *ic = &sc->sc_ic;
 	struct ifreq *ifr;
 	int error = 0;
+	IPW_LOCK_DECL;
 
 	IPW_LOCK(sc);
 
@@ -1769,6 +1775,7 @@
 	struct ipw_firmware_hdr hdr;
 	u_char *p = data;
 	int error;
+	IPW_LOCK_DECL;
 
 	ipw_free_firmware(sc);
 
Index: if_ipwvar.h
===================================================================
RCS file: /usr/store/mlaier/fcvs/src/sys/dev/ipw/if_ipwvar.h,v
retrieving revision 1.3
diff -u -r1.3 if_ipwvar.h
--- if_ipwvar.h	10 Jun 2005 16:49:11 -0000	1.3
+++ if_ipwvar.h	7 Apr 2006 22:23:46 -0000
@@ -170,5 +170,12 @@
 #define SIOCSLOADFW	 _IOW('i', 137, struct ifreq)
 #define SIOCSKILLFW	 _IOW('i', 138, struct ifreq)
 
-#define IPW_LOCK(sc)	mtx_lock(&(sc)->sc_mtx)
-#define IPW_UNLOCK(sc)	mtx_unlock(&(sc)->sc_mtx)
+#define	IPW_LOCK_DECL	int     __waslocked = 0
+#define IPW_LOCK(sc)	do {				\
+	if (!(__waslocked = mtx_owned(&(sc)->sc_mtx)))	\
+		mtx_lock(&(sc)->sc_mtx);		\
+} while (0)
+#define IPW_UNLOCK(sc)	do {			\
+	if (!__waslocked)			\
+		mtx_unlock(&(sc)->sc_mtx);	\
+} while (0)

Attachment: pgpRDnZ1xjljg.pgp
Description: PGP signature

Reply via email to