Date: Mon, 6 Jan 2003 16:26:11 -0800 (PST) From: Nate Lawson <nate@root.org> To: Kyunghwan Kim <redjade@ada.snu.ac.kr> Cc: current@FreeBSD.ORG, net@FreeBSD.ORG Subject: Re: Proper -current if_attach locking? Message-ID: <Pine.BSF.4.21.0301061619580.11736-100000@root.org> In-Reply-To: <20030106143010.GA11655@ada.snu.ac.kr>
next in thread | previous in thread | raw e-mail | index | archive | help
On Mon, 6 Jan 2003, Kyunghwan Kim wrote: > On Mon, Jan 06, 2003 at 10:58:25AM +0100, Harti Brandt wrote: > > On Fri, 3 Jan 2003, Nate Lawson wrote: > > NL>I was looking into some "could sleep messages" and found some bogus > > NL>locking in the attach routine of many drivers. Several init a mtx in > > NL>their softc and then lock/unlock it in their attach routine. This, of > > NL>course, does nothing to provide exclusive access to a device. I assume > > NL>there is going to be a global IF_LOCK or something to be used in attach > > NL>routines. Can someone fill me in on the intended design? > > > > Probably not. I asked the same question a couple of month ago and got 0 > > answers. I think, there is no way, the driver itself can assure exclusive > > access to the device it is attaching. It *must* assume, that there is some > > kind of locking around the call to the attach routine. Getting the lock in > > the softc inside the attach routine may be neccessary, because the routine > > may call other functions that assume they have the lock. > > Only using lock in softc can't assure its exclusive access > because there are some cases of changing some values in ifnet struct > outside of device driver routines. > > Most of the NIC drivers don't have its own locks for now, and using > both IFNET_*LOCK() and its own softc lock can't make everything in sync. My point. > There should be two use of locks IMO: one or more per-device locks > in driver softc for manipulating per-device private data protection, > and ifnet lock for each ifnet struct protection (such as ifnet.if_mtx). Looking further into sys/net/if.c, it appears that the list of interfaces is protected by IFNET_WLOCK in if_attach(). I think it's safe to work under the following assumptions: 1. newbus will not call an attach routine twice for the same hw 2. ifnet routines take care of themselves 3. per-device locking is only necessary to provide exclusive access within a given driver instance. -Nate To Unsubscribe: send mail to majordomo@FreeBSD.org with "unsubscribe freebsd-net" in the body of the message
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?Pine.BSF.4.21.0301061619580.11736-100000>