cdev destroy_dev() and detach races
Kostik Belousov
kostikbel at gmail.com
Mon Jul 2 12:56:46 UTC 2007
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.
>
> 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.
>
> 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.
>
> 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).
>
> 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.)
>
> Thanks
> -Dan
>
>
> [1] http://dragon.roe.ch/~roe/cmx/
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 187 bytes
Desc: not available
Url : http://lists.freebsd.org/pipermail/freebsd-drivers/attachments/20070702/c7b6b6a3/attachment.pgp
More information about the freebsd-drivers
mailing list