Skip site navigation (1)Skip section navigation (2)
Date:      Mon, 2 Jul 2007 15:41:04 +0300
From:      Kostik Belousov <kostikbel@gmail.com>
To:        freebsd-drivers@freebsd.org
Subject:   Re: cdev destroy_dev() and detach races
Message-ID:  <20070702124104.GO2268@deviant.kiev.zoral.com.ua>
In-Reply-To: <20070702120131.GB5161@dragon.roe.ch>
References:  <20070702120131.GB5161@dragon.roe.ch>

next in thread | previous in thread | raw e-mail | index | archive | help

--1D2Sd8R3prdjrxgd
Content-Type: text/plain; charset=us-ascii
Content-Disposition: inline
Content-Transfer-Encoding: quoted-printable

On Mon, Jul 02, 2007 at 02:01:31PM +0200, Daniel Roethlisberger wrote:
> I have been doing some finishing work on my cmx driver [1] and have run
> into some difficulties involving detach races.  This is a pccard driver
> with a cdev interface, the device is a PCMCIA based smartcard reader.
>=20
> Originally, I thought destroy_dev() would block until all threads have
> left the cdevsw handlers.  Then I found out that it would only do so if
> d_purge is set in cdevsw.  However, there aren't an awful lot of drivers
> using this.  My attempts to use a d_purge handler resulted in crashes
> within kern/kern_conf.c when having an endless cat loop running while
> detaching the device.
Do you referring to RELENG_6 or CURRENT ? In CURRENT, destroy_devl() does
sleep until there is any thread that grabbed thread reference. Look at the
rev. 1.199 of kern_conf.c. On the other hand, this was never MFCed, and
cause some other troubles that are being worked on.
>=20
> The solution I am using now is that I sleep in detach() until
> cdev->si_threadcount is 0.  This seems to have done the trick, but I
> still have to do more testing to be sure.
This looks like a workaround.
>=20
> How do other driver solve this problem?  I haven't found much
> documentation on this, and I didn't find any suitable driver to use as a
> guide (ideally a pccard driver with cdev interface, sleeps within
> read/write handlers, running without Giant).
>=20
> I'd be grateful if somebody could share any insight on this, or point me
> to the appropriate documentation.  (Or any other comments on the cmx
> driver code, for that matter.)
>=20
> Thanks
> -Dan
>=20
>=20
> [1] http://dragon.roe.ch/~roe/cmx/

--1D2Sd8R3prdjrxgd
Content-Type: application/pgp-signature
Content-Disposition: inline

-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.7 (FreeBSD)

iD8DBQFGiPJgC3+MBN1Mb4gRAg47AKDGrlvQwoPIlP1SUFxy52+OLjFYgwCdE85r
g6Pr+/NoOaamXnOTYAXkeDQ=
=fPfl
-----END PGP SIGNATURE-----

--1D2Sd8R3prdjrxgd--



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20070702124104.GO2268>