From owner-cvs-all@FreeBSD.ORG Wed Feb 21 18:22:35 2007 Return-Path: X-Original-To: cvs-all@FreeBSD.org Delivered-To: cvs-all@FreeBSD.org Received: from mx1.freebsd.org (mx1.freebsd.org [69.147.83.52]) by hub.freebsd.org (Postfix) with ESMTP id 8586D16C149; Wed, 21 Feb 2007 18:22:35 +0000 (UTC) (envelope-from gallatin@cs.duke.edu) Received: from duke.cs.duke.edu (duke.cs.duke.edu [152.3.140.1]) by mx1.freebsd.org (Postfix) with ESMTP id 453FF13C442; Wed, 21 Feb 2007 18:22:35 +0000 (UTC) (envelope-from gallatin@cs.duke.edu) Received: from grasshopper.cs.duke.edu (grasshopper.cs.duke.edu [152.3.145.30]) by duke.cs.duke.edu (8.14.0/8.14.0) with ESMTP id l1LIMYBP024594 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=NO); Wed, 21 Feb 2007 13:22:34 -0500 (EST) Received: (from gallatin@localhost) by grasshopper.cs.duke.edu (8.12.9p2/8.12.9/Submit) id l1LIMTmd020359; Wed, 21 Feb 2007 13:22:29 -0500 (EST) (envelope-from gallatin) From: Andrew Gallatin MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Transfer-Encoding: 7bit Message-ID: <17884.36324.991314.70617@grasshopper.cs.duke.edu> Date: Wed, 21 Feb 2007 13:22:28 -0500 (EST) To: Luigi Rizzo In-Reply-To: <20070221101005.A91427@xorpc.icir.org> References: <200702151721.l1FHLWno019525@repoman.freebsd.org> <20070221121302.A20229@grasshopper.cs.duke.edu> <20070221092332.A90766@xorpc.icir.org> <17884.34420.308021.423716@grasshopper.cs.duke.edu> <20070221101005.A91427@xorpc.icir.org> X-Mailer: VM 6.75 under 21.1 (patch 12) "Channel Islands" XEmacs Lucid Cc: cvs-src@FreeBSD.org, Luigi Rizzo , src-committers@FreeBSD.org, cvs-all@FreeBSD.org Subject: Re: cvs commit: src/sys/arm/xscale/ixp425 ixp425_npe.c src/sys/dev/ipw if_ipw.c if_ipwvar.h src/sys/dev/isp isp_freebsd.h src/sys/dev/iwi if_iwi.c if_iwivar.h src/sys/dev/mxge if_mxge.c src/sys/kern subr_firmware.c src/sys/sys firmware.h src/sys/tools fw_stub.awk X-BeenThere: cvs-all@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: CVS commit messages for the entire tree List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 21 Feb 2007 18:22:35 -0000 Luigi Rizzo writes: > On Wed, Feb 21, 2007 at 12:50:44PM -0500, Andrew Gallatin wrote: > ... > > Speaking of icky, I'm really worried about the pedantic nature of > > FreeBSD's WITNESS and "never, ever sleep while holding a mutex" dogma > > causing as many problems as it solves. For example, iwi seems to > > simply drop its lock when loading firmware (presumably to avoid > > WITNESS squawking about holding a mutex while grabbing an sx). This > > certainly shuts up WITNESS, but it may also introduce a race, > > especially if the linker needs to sleep and wait for the disk. > > i am not sure i follow you here... > Of course when you drop the lock you risk that the underlying > data structure is manipulated (or in the worst case freed), > but usually you can avoid this with something like > > > sc->flags |= LEAVE_ME_ALONE > UNLOCK Sorry, I hadn't noticed that iwi set a flag like that. I was searching for IWI_UNLOCK(), and it was off the screen :). I've used hacks like that myself in the past. But still, it looks like it only protects the fw loading, and if I knew the driver well enough, I could probably find a scenario where something else protected by the lock races with a firmware load. I just think it would be safer, and less hacky to be allowed to hold a driver mutex while potentially sleeping in the firmware code (and in similar scenarios). I tried using an sx lock in one of my drivers for this reason, and eventually got burned when I added multicast support, because something called my if_ioctl with a mutex held. Drew