A question about in lock usage in FreeBSD

Konstantin Belousov kostikbel at gmail.com
Wed Jun 14 05:05:24 UTC 2017


On Wed, Jun 14, 2017 at 09:10:29AM +0800, Jia-Ju Bai wrote:
> Hi,
> 
> I am a freshman in developing FreeBSD drivers, and I have a question in 
> lock usage in FreeBSD.
> 
> The kernel provides some kinds of locks in developing drivers, such as 
> "mutex lock", "mutex spin lock", "rw lock" and "sx lock". I want to know 
> which locks should be held when the thread can sleep.
Replace should with can in the question.

>  From my knowledge of FreeBSD document, I make the following points:
> (1) "rw lock" and "sx lock" can be used in this situation;
You cannot own rw lock while trying to sleep.

> (2) "mutex lock" and "mutex spin lock" are forbidden in this situation.
> 
> If my points are right, I will make another point:
> mutex_lock will let the thread sleep when the lock is requested, so the 
> mutex_lock can not be called in nested style (namely it is unsafe that 
> mutex_lock is called again when a "mutex lock" is held).
No, mutex does not put the thread which cannot obtain the lock immediately,
to sleep.  The thread is blocked on turnstile.

> 
> Are my points are right?
> I am looking forward to useful opinions and answers :)
Read locking(9).


More information about the freebsd-hackers mailing list