Skip site navigation (1)Skip section navigation (2)
Date:      Fri, 3 Dec 1999 09:18:36 +0000 (GMT)
From:      Doug Rabson <dfr@nlsystems.com>
To:        Nick Hibma <hibma@skylink.it>
Cc:        FreeBSD Newbus Mailing List <new-bus@freebsd.org>
Subject:   Re: PCCARD eject freeze (was Re: your mail) 
Message-ID:  <Pine.BSF.4.10.9912030917570.23924-100000@salmon.nlsystems.com>
In-Reply-To: <Pine.BSF.4.20.9912021651490.2349-100000@henny.jrc.it>

next in thread | previous in thread | raw e-mail | index | archive | help
On Thu, 2 Dec 1999, Nick Hibma wrote:

> > > 	device_detach deletes the softc allocated for the device.
> > > Drivers cache copies of softc in their ISRs and other places where
> > > they sleep and count on the cached copy of softc to still be around
> > > when they are woken up.  If a pccard is ejected between these points,
> > > these cached copies disappear because the ejection code deletes the
> > > device from the device tree (an as a side effect calls detach, which
> > > frees the softc for the device).
> > > 
> > > 	Suspend has a similar problem because it can come in while a
> > > device is sleeping.
> > 
> > The device_detach routine *must* teardown all interrupt handlers and
> > release all resources. If this rule is followed, then the handler
> > shouldn't be called after detach, so there is no problem, right?
> 
> The problem is that the following occurs now:
> 
> DEVICE_DETACH called from device_delete_child wakes up all the sleepers
> and exits. The sleepers actually start running after DEVICE_DETACH has
> finished and the softc has been blown away by the device_delete_child
> that followed.
> 
> I think this cries for a loop: Call detach and if EAGAIN is returned
> make sure sleepers can wake up and exit, and then try again.
> ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>    I have no idea how this 'wait for sleepers to have run' could be
> implemented, but this is I think the crucial part.

I think that the solution is probably to use the busy counter more
effectively.

--
Doug Rabson				Mail:  dfr@nlsystems.com
Nonlinear Systems Ltd.			Phone: +44 181 442 9037




To Unsubscribe: send mail to majordomo@FreeBSD.org
with "unsubscribe freebsd-new-bus" 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.10.9912030917570.23924-100000>