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>