Improve description for Giant and mention blocking inside interrupt threads.

This commit is contained in:
trasz 2010-02-10 17:02:06 +00:00
parent 184538e270
commit d7d58009ce

View File

@ -24,7 +24,7 @@
.\"
.\" $FreeBSD$
.\"
.Dd January 29, 2010
.Dd February 10, 2010
.Dt LOCKING 9
.Os
.Sh NAME
@ -191,13 +191,16 @@ Giant is an instance of a mutex, with some special characteristics:
.It
It is recursive.
.It
Drivers can request that Giant be locked around them, but this is
going away.
.It
You can sleep while it has recursed, but other recursive locks cannot.
Drivers and filesystems can request that Giant be locked around them
by not marking themselves MPSAFE. Note that infrastructure to do this
is slowly going away as non-MPSAFE drivers either became properly locked
or disappear.
.It
Giant must be locked first before other locks.
.It
It is OK to hold Giant while performing unbounded sleep; in such case,
Giant will be dropped before sleeping and picked up after wakeup.
.It
There are places in the kernel that drop Giant and pick it back up
again.
Sleep locks will do this before sleeping.
@ -315,6 +318,9 @@ If any caller above you has any mutex or
rwlock, your sleep, will cause a panic.
If the sleep only happens rarely it may be years before the
bad code path is found.
.Pp
It is an error to do any operation that could result in unbounded sleep when
running inside an interrupt thread.
.Ss Interaction table
The following table shows what you can and can not do if you hold
one of the synchronization primitives discussed here: