Date: Mon, 25 Oct 2004 11:26:15 -0400 From: Brian Fundakowski Feldman <green@freebsd.org> To: Sam <sah@softcardsystems.com> Cc: freebsd-arch@freebsd.org Subject: Re: 6.0 Witness squawk Message-ID: <20041025152615.GQ1072@green.homeunix.org> In-Reply-To: <Pine.LNX.4.60.0410251037540.29901@athena> References: <Pine.LNX.4.60.0410251037540.29901@athena>
next in thread | previous in thread | raw e-mail | index | archive | help
On Mon, Oct 25, 2004 at 11:11:13AM -0500, Sam wrote: > Hello, > > I'm almost finished porting my AoE (ATA over Ethernet) > driver to 6.0 and have a question about a complaint witness > is making. > > In general, is it ok to sleep with a mutex held? > > Specifically, it works like this in the driver. > Each device struct has a mutex for guarding > operations on it. Discovering devices is a two > step process. First the device must respond to > an AoE Query command, then it must respond to > an ATA identify command. On the response to > the latter, I grab the device mutex, examine > the response and call disk_alloc() and disk_create(). > > Both of these functions call malloc with M_WAITOK, > the latter triggers the witness message. > > In my situation, I don't really mind if I sleep > with the mutex since I can't do any useful work > with the device anyway. > > This does leave the possibility that the netisr > for AoE could sleep. > > Thoughts? If you can't do any useful work, why do you have the mutex? Leave the mutex operations for when exclusivity _is_necessary_, after the major parts of initialization. No, it's not okay to sleep with a mutex held -- it must be dropped a la msleep/cv/whatever. -- Brian Fundakowski Feldman \'[ FreeBSD ]''''''''''\ <> green@FreeBSD.org \ The Power to Serve! \ Opinions expressed are my own. \,,,,,,,,,,,,,,,,,,,,,,\
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20041025152615.GQ1072>