From owner-freebsd-current@FreeBSD.ORG Mon Apr 28 14:03:17 2003 Return-Path: Delivered-To: freebsd-current@freebsd.org Received: from mx1.FreeBSD.org (mx1.freebsd.org [216.136.204.125]) by hub.freebsd.org (Postfix) with ESMTP id 5EB3537B401; Mon, 28 Apr 2003 14:03:17 -0700 (PDT) Received: from harmony.village.org (rover.bsdimp.com [204.144.255.66]) by mx1.FreeBSD.org (Postfix) with ESMTP id 614A943F75; Mon, 28 Apr 2003 14:03:14 -0700 (PDT) (envelope-from imp@bsdimp.com) Received: from localhost (warner@rover2.village.org [10.0.0.1]) by harmony.village.org (8.12.8/8.12.3) with ESMTP id h3SL3DA7083264; Mon, 28 Apr 2003 15:03:13 -0600 (MDT) (envelope-from imp@bsdimp.com) Date: Mon, 28 Apr 2003 15:03:07 -0600 (MDT) Message-Id: <20030428.150307.83622281.imp@bsdimp.com> To: jhb@FreeBSD.org From: "M. Warner Losh" In-Reply-To: References: <86znmdq3o7.wl@j10n.org> X-Mailer: Mew version 2.1 on Emacs 21.2 / Mule 5.0 (SAKAKI) Mime-Version: 1.0 Content-Type: Text/Plain; charset=us-ascii Content-Transfer-Encoding: 7bit cc: freebsd-current@FreeBSD.org cc: shinra@j10n.org Subject: Re: panic: sleeping thread owns a mutex X-BeenThere: freebsd-current@freebsd.org X-Mailman-Version: 2.1.1 Precedence: list List-Id: Discussions about the use of FreeBSD-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 28 Apr 2003 21:03:17 -0000 In message: John Baldwin writes: : : On 26-Apr-2003 AIDA Shinra wrote: : > My kernel always panics when I remove my wi pccard (WLI-PCM-S11). : > I am using OLDCARD and enabling hw.pcic.intr_path=1. With NEWCARD no : > cards work. I reported this bug 2 weeks ago but even today's kernel : > panics in exactly the same way. Anyone experiencing the same problem? : > Or just my misconfiguration? : : Can you try this patch: : : Index: if_wi.c : =================================================================== : RCS file: /usr/cvs/src/sys/dev/wi/if_wi.c,v : retrieving revision 1.137 : diff -u -r1.137 if_wi.c : --- if_wi.c 10 Apr 2003 07:55:55 -0000 1.137 : +++ if_wi.c 28 Apr 2003 20:39:37 -0000 : @@ -486,10 +486,10 @@ : ifmedia_removeall(&sc->sc_media); : : ieee80211_ifdetach(ifp); : + WI_UNLOCK(sc); : bus_teardown_intr(dev, sc->irq, sc->wi_intrhand); : wi_free(dev); : : - WI_UNLOCK(sc); : #if __FreeBSD_version >= 500000 : mtx_destroy(&sc->sc_mtx); : #endif : : It is not ok to hold a lock when calling bus_teardown_intr() or : bus_setup_intr(). This brings up another problem. If wi is on a shared interrupt, what happens if an interrupt comes in while the device is being torn down? Eg, as soon as you drop that lock, the wi_intr gets the lock and bad things happen at the mtx_destroy potentially. How do we keep from racing? Warner