locking in a device driver
imp at bsdimp.com
Wed Nov 2 11:13:31 PST 2005
From: Dinesh Nair <dinesh at alphaque.com>
Subject: Re: locking in a device driver
Date: Thu, 03 Nov 2005 02:23:32 +0800
> On 10/28/05 10:52 M. Warner Losh said the following:
> > libc_r will block all other threads in the application while an ioctl
> > executes. libpthread and libthr won't. I've had several bugs at work
> so if the userland thread does an ioctl, and the the driver goes to
> tsleep() when the ioctl is received, all other threads are also blocked
> from executing, i.e wont be context switched to run ?
Yes. if you tsleep with signals enabled, the periodic timer will go
off, and you'll return early. This typically isn't what you want
> is this behaviour only 4.x specific or is it also there in 5.x ?
This behavior is libc_r specific. Any userland threadding library
will have these issues. It is fundamental to how userland threadding
works. If you use libc_r on 5, you'll see exactly this behavior. If
you use libpthread or libthr, you won't.
More information about the freebsd-hackers